algoritmos e estruturas de dados - marcio bueno · um processo de resolução tardia permite que os...

23
Prof. Márcio Bueno {bd2tarde,bd2noited}@marciobueno.com Procedimentos armazenados Material da Profª Maria Lígia B. Perkusich

Upload: ngoque

Post on 15-Dec-2018

217 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Algoritmos e Estruturas de Dados - Marcio Bueno · Um processo de resolução tardia permite que os procedimentos referenciem objetos que não ... @resp int OUTPUT AS SET @resp =

Prof. Márcio Bueno {bd2tarde,bd2noited}@marciobueno.com

Procedimentos armazenados

Material da Profª Maria Lígia B. Perkusich

Page 2: Algoritmos e Estruturas de Dados - Marcio Bueno · Um processo de resolução tardia permite que os procedimentos referenciem objetos que não ... @resp int OUTPUT AS SET @resp =

2/23

Procedimentos armazenados (i)

Definição Um procedimento armazenado (stored

procedure) é uma coleção nomeada de comandos SQL que é armazenada no servidor (compiladas), como um procedimento/ função, para eventuais processamentos.

Banco de Dados II - Márcio Bueno

Page 3: Algoritmos e Estruturas de Dados - Marcio Bueno · Um processo de resolução tardia permite que os procedimentos referenciem objetos que não ... @resp int OUTPUT AS SET @resp =

3/23

Procedimentos armazenados (ii)

Considere a consulta:SELECT codigop, nome FROM Projeto p, Alocacao a

WHERE p.codproj = a.codigop

Podemos criar um procedimento armazenado para a mesma, como: CREATE PROCEDURE DBO.AlocadoProjeto AS

SELECT codigop, nome FROM Projeto p JOIN Alocacao a ON p.codproj = a.codigop

Para executarEXEC AlocadoProjeto;

Banco de Dados II - Márcio Bueno

Page 4: Algoritmos e Estruturas de Dados - Marcio Bueno · Um processo de resolução tardia permite que os procedimentos referenciem objetos que não ... @resp int OUTPUT AS SET @resp =

4/23

Procedimentos armazenados (iii)

É um método de encapsular tarefas repetitivas que

são executadas mais eficientemente

Pré-compiladas

Procedimento armazenado suporta

Variáveis definidas pelo usuário;

Execução condicional;

Chamadas a outros procedimentos armazenados;

Parâmetros de entrada e saída;

e outras características poderosas de programação.

Banco de Dados II - Márcio Bueno

Page 5: Algoritmos e Estruturas de Dados - Marcio Bueno · Um processo de resolução tardia permite que os procedimentos referenciem objetos que não ... @resp int OUTPUT AS SET @resp =

5/23

Criando um procedimento

armazenado (i)

Quando um procedimento armazenado é criado, seus comandos são verificados sintaticamente. Se estiverem corretos, o procedimento é criado. No SQL Server o nome e o código do procedimento

são armazenados nas tabelas do sistema sysobjects e syscomments, respectivamente. Sp_helptext AlocadoProjeto

Um erro é retornado se algum erro de sintaxe for detectado, e o procedimento não é criado.

Banco de Dados II - Márcio Bueno

Page 6: Algoritmos e Estruturas de Dados - Marcio Bueno · Um processo de resolução tardia permite que os procedimentos referenciem objetos que não ... @resp int OUTPUT AS SET @resp =

6/23

Criando um procedimento

armazenado (ii)

Um processo de resolução tardia permite que

os procedimentos referenciem objetos que não

existam quando o procedimento é criado.

Este processo permite flexibilidade porque

procedimentos armazenados e outros objetos que

ele referencia não precisa ser criado em uma ordem

em particular.

Os objetos precisam existir quando o

procedimento for executado.

Banco de Dados II - Márcio Bueno

Page 7: Algoritmos e Estruturas de Dados - Marcio Bueno · Um processo de resolução tardia permite que os procedimentos referenciem objetos que não ... @resp int OUTPUT AS SET @resp =

7/23

Criando um procedimento

armazenado (iii)

Quando o procedimento é executado pela primeira vez, ou se ele for recompilado, o processador de consulta ler o procedimento armazenado em um processo chamado resolução.

Em seguida o otimizador de consultas analisa as declarações no procedimento e cria um plano que contém o método mais rápido para acessar os dados memória Quantidade de dados nas tabelas, índices, junções,

etc.

Banco de Dados II - Márcio Bueno

Page 8: Algoritmos e Estruturas de Dados - Marcio Bueno · Um processo de resolução tardia permite que os procedimentos referenciem objetos que não ... @resp int OUTPUT AS SET @resp =

8/23

Compilação

É o processo de analisar o procedimento e criar um plano de execução que será colocado na memória - tabela sysprocedures

A memória contém os planos de execução mais valiosos.

Fatos que incrementam o valor de um plano incluem:

Tempo necessário para compilar

Uso freqüente

O espaço necessário para armazenar o plano decrementa seu valor

Banco de Dados II - Márcio Bueno

Page 9: Algoritmos e Estruturas de Dados - Marcio Bueno · Um processo de resolução tardia permite que os procedimentos referenciem objetos que não ... @resp int OUTPUT AS SET @resp =

9/23

Vantagens fundamentais

Quando o procedimento é executado pela primeira vez, o plano de consulta é lido e completamente otimizado na forma de um plano de procedimento e então executado Isso evita a analise sintática, resolução a cada execução

da consulta

Depois de ser executado pela primeira vez, o plano de um procedimento armazenado é armazenado na memória Da próxima vez que se utilizar esse procedimento na

mesma sessão, ele será lido da memória e executado

Banco de Dados II - Márcio Bueno

Page 10: Algoritmos e Estruturas de Dados - Marcio Bueno · Um processo de resolução tardia permite que os procedimentos referenciem objetos que não ... @resp int OUTPUT AS SET @resp =

10/23

Vantagens (i)

Desempenho

Reduz o tráfego na rede.

Ao invés dos usuários enviarem centenas de

comandos SQL pela rede, os usuários

podem executar operações complexas

enviando apenas um comando, o que reduz

a quantidade de requisições entre os clientes

e os servidor.

Exemplo:

EXEC AlocadoProjeto

Banco de Dados II - Márcio Bueno

Page 11: Algoritmos e Estruturas de Dados - Marcio Bueno · Um processo de resolução tardia permite que os procedimentos referenciem objetos que não ... @resp int OUTPUT AS SET @resp =

11/23

Vantagens (ii)

Fácil Gerenciamento

Procedimentos armazenados podem

encapsular as regras do negócio.

Tais regras, se mudarem, poderão ser

trocadas em um único lugar.

Todos os usuários podem usar o mesmo

procedimento para assegurar

consistência ao acesso a dados e

modificação.

Banco de Dados II - Márcio Bueno

Page 12: Algoritmos e Estruturas de Dados - Marcio Bueno · Um processo de resolução tardia permite que os procedimentos referenciem objetos que não ... @resp int OUTPUT AS SET @resp =

12/23

Vantagens (iii)

Segurança

Os usuários não precisam saber detalhes da

implementação, ou das tabelas que serão usadas.

Se um conjunto de procedimentos armazenados

suporta todas as funcionalidades que os usuários

precisam, esses usuários nunca precisarão acessar

as tabelas diretamente.

Usuários podem ter acesso aos procedimentos

armazenados, mesmo que não tenham acesso

direto as tabelas ou visões destas.

Banco de Dados II - Márcio Bueno

Page 13: Algoritmos e Estruturas de Dados - Marcio Bueno · Um processo de resolução tardia permite que os procedimentos referenciem objetos que não ... @resp int OUTPUT AS SET @resp =

13/23

Sintaxe

CREATE PROC[EDURE] nome_do_proc

[{ @parâmetro tipo_de_dado}

[=default|NULL] [OUTPUT]] [,....n]

[WITH {RECOMPILE | ENCRYPTION |

{RECOMPILE, ENCRYPTION}]

AS instrução_de_SQL [...n]

Banco de Dados II - Márcio Bueno

Page 14: Algoritmos e Estruturas de Dados - Marcio Bueno · Um processo de resolução tardia permite que os procedimentos referenciem objetos que não ... @resp int OUTPUT AS SET @resp =

14/23

Exemplos – sem parâmetros

Os comandos abaixo criam um procedimento armazenado que lista todos os livros que estão em atraso em um banco de dados de uma biblioteca.

Criando o procedimento USE biblioteca

CREATE PROC dbo.livros_atraso [WITH RECOMPILE]

AS

SELECT * FROM dbo.emprestimo

WHERE data_limite < GETDATE( )

Executando o procedimentoUSE biblioteca

EXEC livros_atraso

Banco de Dados II - Márcio Bueno

Page 15: Algoritmos e Estruturas de Dados - Marcio Bueno · Um processo de resolução tardia permite que os procedimentos referenciem objetos que não ... @resp int OUTPUT AS SET @resp =

15/23

Exemplos - com parâmetros

de entrada (i)

Criando o procedimento:CREATE PROC dbo.empregados@nome varchar(50) = ‘Pessoal’ASSELECT e.matricula, e.nome, e.endereco, e.salarioFROM Empregados e JOIN Departamento dON e.cod_depto = d.codigoWHERE d.nome = @nome

Uma chamada a este procedimento seria:EXEC empregados „Informatica‟

Banco de Dados II - Márcio Bueno

Page 16: Algoritmos e Estruturas de Dados - Marcio Bueno · Um processo de resolução tardia permite que os procedimentos referenciem objetos que não ... @resp int OUTPUT AS SET @resp =

16/23

Exemplos - com parâmetros

de entrada (ii)

Criando o procedimento:

CREATE PROCEDURE InsereEmpregado

@mat int, @nome varchar(30), @enderecovarchar(60), @salario float, @depto int

AS INSERT INTO Empregado

VALUES (@mat, @nomeE, @endereco, @salario,

@depto)

Executando o procedimento

EXEC InsereEmpregado „324‟, „Maria‟, „Rua das Rosas, 100‟, „R$ 1000,00‟, „10‟

Banco de Dados II - Márcio Bueno

Page 17: Algoritmos e Estruturas de Dados - Marcio Bueno · Um processo de resolução tardia permite que os procedimentos referenciem objetos que não ... @resp int OUTPUT AS SET @resp =

17/23

Exemplo - com parâmetros de

entrada (iii)

CREATE PROCEDURE find_isbn

@titulo string = null,

@ traducao char(8) = „portugues‟ AS

IF @titulo is null

BEGIN

PRINT “Entre com o título”

RETURN

END

SELECT isbn, titulo, traducao

FROM item I JOIN titulo t ON t.titulo_no = I.titulo_no

WHERE t.titulo LIKE @titulo AND I.traducao LIKE @traducao

Banco de Dados II - Márcio Bueno

Page 18: Algoritmos e Estruturas de Dados - Marcio Bueno · Um processo de resolução tardia permite que os procedimentos referenciem objetos que não ... @resp int OUTPUT AS SET @resp =

18/23

Exemplos - com parâmetros de

saída (i)

Criando o procedimento:CREATE PROCEDURE DBO.Soma

@x int, @y int,

@resp int OUTPUT

AS

SET @resp = @x + @y

Executando o procedimentoDECLARE @resposta int

EXEC Soma 100, 400, @resposta OUTPUT

(ou EXEC Soma y=400, x=100, resp=@resposta OUTPUT)

Select „Resposta = „, @resposta

Banco de Dados II - Márcio Bueno

Page 19: Algoritmos e Estruturas de Dados - Marcio Bueno · Um processo de resolução tardia permite que os procedimentos referenciem objetos que não ... @resp int OUTPUT AS SET @resp =

19/23

Exemplos - com parâmetros de

saída (ii)

Criando o procedimento:CREATE PROCEDURE DBO.Multiplica

@x int, @y int,

@resp int OUTPUT

AS

SET @resp = @x * @y

Executando o procedimentoDECLARE @resposta int

EXEC Multiplica 2, 3, @resposta OUTPUT

Select „A resposta é: „, @resposta

Banco de Dados II - Márcio Bueno

Page 20: Algoritmos e Estruturas de Dados - Marcio Bueno · Um processo de resolução tardia permite que os procedimentos referenciem objetos que não ... @resp int OUTPUT AS SET @resp =

20/23

Executando procedimentos (i)

Executado um procedimento

armazenado por ele mesmo

Exec livros_atraso

Com recompilação

EXEC pauthors

WITH RECOMPILE

Banco de Dados II - Márcio Bueno

Page 21: Algoritmos e Estruturas de Dados - Marcio Bueno · Um processo de resolução tardia permite que os procedimentos referenciem objetos que não ... @resp int OUTPUT AS SET @resp =

21/23

Executando procedimentos (ii)

Executado um procedimento armazenado dentro de uma declaração INSERT INSERT INTO clientes

EXEC empregado_cliente

Criando o procedimento

CREATE PROC empregado_cliente AS

SELECT lastname, firstname, address, city

FROM empregados

WHERE data_contratacao = GETDATE()

O seguinte declaração executa o procedimento

INSERT into clientes

EXEC empregado_cliente

Banco de Dados II - Márcio Bueno

Page 22: Algoritmos e Estruturas de Dados - Marcio Bueno · Um processo de resolução tardia permite que os procedimentos referenciem objetos que não ... @resp int OUTPUT AS SET @resp =

22/23

Forçando a recompilação

Você pode forçar todos os

procedimentos armazenados e

gatilhos que fazem referência a uma

tabela particular serem recompiladas

em seu próximo tempo de execução

executando o procedimento

armazenado sp_recompile:

EXEC sp_recompile autores

Banco de Dados II - Márcio Bueno

Page 23: Algoritmos e Estruturas de Dados - Marcio Bueno · Um processo de resolução tardia permite que os procedimentos referenciem objetos que não ... @resp int OUTPUT AS SET @resp =

23/23

Removendo procedimentos

armazenados

USE Empresa

DROP PROC Empregados

Banco de Dados II - Márcio Bueno