A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

1 Banco de Dados SQL Stored Procedures Elaini Simoni Angelotti.

Apresentações semelhantes


Apresentação em tema: "1 Banco de Dados SQL Stored Procedures Elaini Simoni Angelotti."— Transcrição da apresentação:

1 1 Banco de Dados SQL Stored Procedures Elaini Simoni Angelotti

2 2 Stored Prodecure (sp) São semelhantes a procedimentos e subrotinas em outras linguagens: –Podem ser chamadas por outra sp ou por aplicativos desenvolvidos em PHP, ASP, Delphi, VB, etc –Podem receber e retornar parâmetros –Podem conter instruções de controle e laços Uma stored procedure (sp) é uma coleção de comandos nomeada que é salva no BD.

3 3 Uma vez criada, uma sp pode ser executada sempre que necessário, simplesmente chamando a sp. Vantagens de utilizar sp: –Facilitar a manutenção e a alteração das aplicações –Ocultar a complexidade de acesso ao BD –Poder receber parâmetros de entrada e retornar resultados –Reduzir o tráfego de rede gerado pela aplicação –Facilitar e centralizar o gerenciamento de permissões –Melhorar a velocidade de execução

4 4 Para escrever uma sp pode-se utilizar instruções de comparações (if), loops (while), operadores, variáveis, etc Para o início e fim de um bloco usa-se BEGIN e END Exemplo: Escrever uma sp que imprima Hello world CREATE PROCEDURE sp_Teste AS BEGIN SELECT o famoso Hello World END Para Executar a sp: EXEC sp_Teste

5 5 Pode-se declarar uma variável em uma sp para armazenar valores. Usa-se o comando DECLARE para declarar variáveis. CREATE PROCEDURE sp_Teste1 AS varchar (100) BEGIN = o famoso Hello World END Para Executar a sp: EXEC sp_Teste1

6 6 Sp com Parâmetros de Entrada Permite a criação de sp mais flexíveis Os parâmetros são sempre declarados e devem ter o tipo de dados definido. –Exemplo 1: Crie uma sp para encontrar todas as pessoas que emprestaram uma fita em um determinado ano (para o BD Locadora). O ano será passado como parâmetro de entrada e a sp utilizará este parâmetro como critério de pesquisa, retornando o nome do cliente, data de empréstimo, data de devolução prevista e data de devolução efetiva.

7 7 CREATE PROCEDURE int AS BEGIN select nome_cli as 'Nome do Cliente', convert(char, data_emp,103) as 'Data do Emprestimo', convert(char, data_dev_prev, 103) as 'Data da Devolução Prevista', convert(char, data_dev_efet, 103) as 'Data da Devolução Efetiva' from Cliente inner join Emp_dev on cliente.CPF_cli = Emp_dev.CPF_cli where datepart(yy, data_emp) END EXEC sp_Emprestimo_Ano 2006

8 8 –Exemplo 2: Crie uma sp para encontrar todas as pessoas que emprestaram uma fita em um determinado período. Para isso, a sp terá dois parâmetros de entrada (data inicial e data final). Esses parâmetros serão utilizados como critério de pesquisa. A sp deve retornar o nome do cliente, data de empréstimo, data de devolução prevista e data de devolução efetiva.

9 9 CREATE PROCEDURE datetime AS BEGIN select nome_cli as 'Nome do Cliente', convert(char, data_emp,103) as 'Data do Emprestimo', convert(char, data_dev_prev, 103) as 'Data da Devolução Prevista', convert(char, data_dev_efet, 103) as 'Data da Devolução Efetiva' from Cliente inner join Emp_dev on cliente.CPF_cli = Emp_dev.CPF_cli where data_emp END EXEC sp_Emprestimo ' ', ' '

10 10 Exemplo 3: usando variáveis, parâmetros e instrução IF.. ELSE –Crie uma sp que receba uma substring do nome de um fornecedor e conte quantos fornecedores existem com aquela substring. Caso nenhum fornecedor tenha a substring, uma mensagem deve ser enviada notificando o usuário. Caso a quantidade de fornecedor seja maior que zero, então o usuário também deve ser notificado sobre o número de pessoas com a substring.

11 11 CREATE PROCEDURE varchar (50) AS varchar (100) BEGIN select CNPJ_forn, Nome_forn fromFornecedor where nome_forn like '%' + '%' = (select count(*) from Fornecedor where nome_forn like '%' + '%') = 0 BEGIN = 'Nenhum fornecedor contem a substring ' END ELSE BEGIN = 'existem ' + = 'fornecedores com a substring ' END EXEC sp_BuscaFornecedor 'M'

12 12 Exemplo 4: –Crie uma sp que receba como parâmetros de entrada o nome de duas categorias de filmes e conte o número de empréstimos para cada uma das duas categorias em um determinado ano (que também será passado por parâmetro). O número de empréstimos de cada categoria deve ser armazenado em uma variável local. Em seguida, um teste é feito emitindo a mensagem de qual categoria teve mais filmes emprestados no ano selecionado.

13 13 CREATE PROCEDURE varchar(50) AS varchar (100) BEGIN = (select count(*) from fita inner join Emp_dev on fita.cod_fita = Emp_dev.cod_fita where categoria AND datepart(yy,data_emp) = (select count(*) from fita inner join Emp_dev on fita.cod_fita = Emp_dev.cod_fita where categoria AND datepart(yy,data_emp) IF BEGIN = 'o número de emprestimos de fitas da categoria ' + ' é maior' END ELSE IF BEGIN = 'o número de emprestimos de fitas da categoria ' + ' é menor' END ELSE BEGIN = 'o número emprestimos de fitas das duas categoria são iguais' END EXEC sp_Maior_Emprestimo_Categoria 2005, 'comedia', 'terror'

14 14 Usando a Instrução WHILE Faz com que um conjunto de comandos execute enquanto uma dada condição for verdadeira Exemplo 5: –Crie uma nova tabela chamada Soma_Naturais com dois atributos inteiros: número e Soma_acumulada create table Soma_naturais ( Numero int, Soma_acumulada int )

15 15 Em seguida crie uma sp que calcule a soma dos n primeiros números e armazene as somas nas respectivas colunas. Por exemplo: NúmeroSoma Acumulada CREATE PROCEDURE int As DELETE from Soma_naturais int = 1 int = 0 BEGIN WHILE BEGIN insert into Soma_naturais + 1 END select * from Soma_naturais END

16 16 Instrução WHILE e BREAK CREATE PROCEDURE sp_Preço AS money WHILE (SELECT AVG(preco) FROM fita) < 5 BEGIN UPDATE fita SET preco = preco = (Select MAX(preco) FROM fita) IF > 7) BREAK PRINT 'Isso foi apenas um teste!' select * from fita END exec sp_Preço

17 17 Parâmetros de Saída para sp Para definir um parâmetro de saída basta colocar a palavra OUTPUT após a definição do tipo de parâmetro CREATE PROCEDURE int OUTPUT Crie uma sp que retorne o valor médio de preço das fitas para um estado que será passado como parâmetro de entrada

18 18 CREATE PROCEDURE float OUTPUT AS BEGIN = (Select AVG(preco) as Media from fita INNER JOIN Fornecedor_Fita ON Fornecedor_Fita.cod_fita = fita.cod_fita INNER JOIN Fornecedor ON Fornecedor_Fita.CNPJ_forn = Fornecedor.CNPJ_forn where UF_forn END PARA EXECUTAR: float exec sp_MediaPreçoEstado OUTPUT Print

19 19 Para alterar uma sp usa-se o seguinte comando: ALTER PROCEDURE nome_da_sp Para apagar uma sp usa-se o seguinte comando: DROP PROCEDURE nome_da_sp Para criptografar os comandos de uma sp: CREATE PROCEDURE sp_Clientes WITH ENCRYPTION AS select * from Cliente Exec sp_helptext sp_clientes Exec sp_helptext sp_Teste


Carregar ppt "1 Banco de Dados SQL Stored Procedures Elaini Simoni Angelotti."

Apresentações semelhantes


Anúncios Google