Banco de Dados Prof. MSc Wagner Siqueira Cavalcante
Banco de Dados: Stored Procedures e Triggers BD – Stored Procedures e Triggers Stored Procedure é um conjunto de instruções escrito numa linguagem própria para procedures (procedimentos) e triggers (gatilhos) do SGBD, e que é armazenado como parte do banco de dados. Stored Procedures reduzem o tráfego na rede, pois são executadas pelo SGBD na máquina servidora de banco de dados. Stored Procedures não permitem instruções DDL... Triggers são quase a mesma coisa que stored procedures, exceto pelo modo como são chamadas (e mais alguns pequenos detalhes): –Stored procedures podem ser chamadas por aplicações cliente, outras stored procedures ou triggers. –Triggers são chamados automaticamente quando uma alteração em uma linha da tabela em questão ocorre.
Stored Procedures BD – Stored Procedures Sintaxe de Stored Procedures: CREATE or ALTER PROCEDURE NomedaProcedure ( ) RETURNS AS BEGIN END Parâmetros de entrada:Valores iniciais, que servem para estabelecer o comportamento do procedimento (todos os tipos, exceto BLOB ou ARRAY). Parâmetros de saída:Valores que retornam os resultados desejados, executados pelo procedimento (idem ao acima). Comandos da procedure:Conjunto de instruções SQL...
Um livro é escrito por um ou mais escritores, e os registram em uma única Editora, que pode publicar nenhum, um ou vários livros. Porém, nem todos estes livros conseguem ser lançados, embora já estejam registrados. Cada livro está associado a um determinado assunto, e pode ser escrito por um ou vários autores, os quais, por sua vez, podem escrever tantos livros quantos queiram. Autor-Livro Editora Código Nome 0,N 1,N 0,1 é de um publica Lançamento Preço 0,N Livro Código Data de contrato 1,N Autor Matrícula Nome CPF Data de nascimento Endereço pais 1,1 Sigla Descrição Assunto BD – Stored Procedures
Tabela AUTOR MATR.NOMECPFENDERECONASCIMpais 501Rogério Luís de C. Costa Rua Dom Pedro I, 11101/01/1971BR 502Chris Gane Av La Rue, XV02/02/1952US 503Trish Sarson th Ave, 33303/03/1963US 505Rogério Matoso Capim Praça do Centro, banco 404/04/1974BR 507Roger Martin Duvalle Av Ces La Vue, 55505/05/1985FR 510José Antônio da Silva Rua 6 de Outubro, 60606/06/1976BR 511Elmasri th Ave, 77707/07/1967US 521Navathe th Ave, 88808/08/1958IN 533Silberschatz nd Ave, 99909/09/1969NO... Um livro é escrito por um ou mais escritores, e os registram em uma única Editora, que pode publicar nenhum, um ou vários livros. Porém, nem todos estes livros conseguem ser lançados, embora já estejam registrados. Cada livro está associado a um determinado assunto, e pode ser escrito por um ou vários autores, os quais, por sua vez, podem escrever tantos livros quantos queiram. Por enquanto, considere apenas a tabela Autor...
Tabela AUTOR MATR.NOMECPFENDERECONASCIMpais 501Rogério Luís de C. Costa Rua Dom Pedro I, 11101/01/1971BR 502Chris Gane Av La Rue, XV02/02/1952US 503Trish Sarson th Ave, 33303/03/1963US 505Rogério Matoso Capim Praça do Centro, banco 404/04/1974BR 507Roger Martin Duvalle Av Ces La Vue, 55505/05/1985FR 510José Antônio da Silva Rua 6 de Outubro, 60606/06/1976BR 511Elmasri th Ave, 77707/07/1967US 521Navathe th Ave, 88808/08/1958IN 533Silberschatz nd Ave, 99909/09/1969NO... Exemplo 01: –Projete o nome, nascimento e país do autor, cujo código é igual a 505: Select nome, nascim, pais From Autor Where Matricula = 505 BD – Stored Procedures
Resultado da Consulta: NOMENASCIMpais Rogério Matoso Capim04/04/1974BR Exemplo 01 (continuação): –Projete o nome, nascimento e país do autor, cujo código será digitado em uma caixa de diálogo: Select nome, nascim, pais From Autor Where Matricula = 505 BD – Stored Procedures Há só UMA resposta!
EEEExemplo 01 (continuação): –A–A–A–A seguir, crie um procedimento para executar esta situação: IIIInicie o SQL Editor, digite as seguintes instruções SQL, salve-a com o nome “SP_Dados_Autor”. set term^ ;CREATE orALTERPROCEDURESP_Dados_Autor (i_codigosmallint) RETURNS (o_nomevarchar(80), o_Nascimdate, o_paisvarchar(30) ) AS BEGIN Selectnome, nascim, pais FromAutor Wherematricula = :i_codigo INTO:o_nome, :o_Nascim, :o_pais; SUSPEND; END^ set term; ^ BD – Stored Procedures Select nome, nascim, pais Firom Autor Where Matricula = 505
CREATE orALTERPROCEDURESP_Dados_Autor (i_codigo smallint) RETURNS (o_nome varchar(80), o_Nascim date, o_pais varchar(30) )ASBEGIN Select nome, nascim, pais From Autor Where matricula = :i_codigo INTO:o_nome, :o_Nascim, :o_pais; SUSPEND;END^ BD – Stored Procedures Exemplo 01 (final): –E para usar o procedimento criado? SELECT * FROMSP_Dados_Autor ( 505 );
Tabela AUTOR MATR.NOMECPFENDERECONASCIMPAIS 501Rogério Luís de C. Costa Rua Dom Pedro I, 11101/01/1971BR 502Chris Gane Av La Rue, XV02/02/1952US 503Trish Sarson th Ave, 33303/03/1963US 505Rogério Matoso Capim Praça do Centro, banco 404/04/1974BR 507Roger Martin Duvalle Av Ces La Vue, 55505/05/1985FR 510José Antônio da Silva Rua 6 de Outubro, 60606/06/1976BR 511Elmasri th Ave, 77707/07/1967US 521Navathe th Ave, 88808/08/1958IN 533Silberschatz nd Ave, 99909/09/1969NO... BD – Stored Procedures Exemplo 02: –Agora, experimente projetar os nomes, nascimento e países dos autores, cujo país seja igual ao informado: Select nome, nascim, pais From Autor Where pais = 'BR'
Resultado da Consulta NOMENASCIMPAIS Rogério Luís de C. Costa01/01/1971BR Rogério Matoso Capim04/04/1974BR José Antônio da Silva06/06/1976BR BD – Stored Procedures Exemplo 02 (continuação): –Agora, experimente projetar os nomes, nascimento e países dos autores, cujo país seja igual ao informado: Select nome, nascim, pais From Autor Where pais = 'BR’ Há MAIS QUE UMA resposta!
Exemplo 02 (continuação): –Crie, então, o procedimento armazenado para executar esta situação: Inicie o SQL Editor, digite as seguintes instruções SQL, salve-a com o nome “dadosproprietario2” e a execute. CREATE orALTERPROCEDURESP_Dados_Autor2 (in_paisvarchar(30)) RETURNS (out_Nomevarchar(80), out_Nascimdate, out_paisvarchar(30) ) AS BEGIN INTO:out_Nome, :out_Nascim, :out_pais; SUSPEND; END BD – Stored Procedures Select nome, nascim, pais From Autor Where pais = :in_pais
Exemplo 02 (continuação): –Crie, então, o procedimento armazenado para executar esta situação: Inicie o SQL Editor, digite as seguintes instruções SQL, salve-a com o nome “dadosproprietario2” e a execute. CREATE orALTERPROCEDURESP_Dados_Autor2 (in_pais varchar(30)) RETURNS (out_Nome varchar(80), out_Nascim date, out_pais varchar(30) )ASBEGIN Select nome, nascim, pais From Autor Where pais = :in_pais INTO:out_Nome, :out_Nascim, :out_pais; SUSPEND;END BD – Stored Procedures Oops! Problemas, já que há mais que uma resposta! Usar:FOR SELECT... DOSUSPEND;
Exemplo 02 (continuação): –Crie, então, o procedimento armazenado para executar esta situação: Inicie o SQL Editor, digite as seguintes instruções SQL, salve-a com o nome “dadosproprietario2” e a execute. CREATE orALTERPROCEDURESP_Dados_Autor2 (in_pais varchar(30)) RETURNS (out_Nome varchar(80), out_Nascim date, out_pais varchar(30) )ASBEGIN FORSelect nome, nascim, pais From Autor Where pais = :in_pais INTO:out_Nome, :out_Nascim, :out_pais DOSUSPEND;END BD – Stored Procedures Agora, sem o “;” aqui
Exemplo 02 (continuação): –E para usar o procedimento criado? CREATE or ALTER PROCEDURESP_Dados_Autor2 (in_paisvarchar(30)) RETURNS (Out_Nome varchar(80), Out_nascim date, Out_pais varchar(30) )ASBEGIN FOR Select nome, nascim, pais From Autor Where pais =:in_pais INTO:Out_nome, :Out_nascim, :Out_pais DOSUSPEND;END BD – Stored Procedures SELECT * FROMSP_Dados_Autor2 ( ‘BR’ ); CREATE or ALTER PROCEDURESP_Dados_Autor2 (in_paisvarchar(30)) RETURNS (Out_Nome varchar(80), Out_nascim date, Out_pais varchar(30) )ASBEGIN FOR Select nome, nascim, pais From Autor Where pais =:in_pais INTO:Out_nome, :Out_nascim, :Out_pais DOSUSPEND;ENDSP_Dados_Autor2 (in_pais ) :in_pais
Exemplo 02 (final): –Experimente, também: BD – Stored Procedures SELECT nome as “Nome do autor” FROMSP_Dados_Autor2 ( :”Digite o país” );
Exercício 01: –Crie um procedimento para calcular o valor médio dos livros de uma determinada editora, informada como parâmetro. –Salve-o com o nome de “SP_avglivros” –Compile-o e efetive-o (commit) –Chame-o, via SQL, com o parâmetro predefinido (‘Brasoft Editora’, por exemplo) BD – Stored Procedures Exercício 02: –Projete os títulos, datas de lançamento e valores dos livros que têm o seu valor maior que o valor médio daquele informado via argumento de entrada, baseado no procedimento “avglivros”.