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 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 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... 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): 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: 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 nacionalidade 1,1 Sigla Descrição Assunto BD – Stored Procedures
Tabela AUTOR MATR.NOMECPFENDERECONASCIMNACIONAL 501Rogério Luís de C. Costa Rua Dom Pedro I, 11101/01/1971brasileira 502Chris Gane Av La Rue, XV02/02/1952norte americana 503Trish Sarson th Ave, 33303/03/1963norte americana 505Rogério Matoso Capim Praça do Centro, banco 404/04/1974brasileira 507Roger Martin Duvalle Av Ces La Vue, 55505/05/1985francesa 510José Antônio da Silva Rua 6 de Outubro, 60606/06/1976brasileira 511Elmasri th Ave, 77707/07/1967norte americana 521Navathe th Ave, 88808/08/1958indiana 533Silberschatz nd Ave, 99909/09/1969norueguesa... 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.NOMECPFENDERECONASCIMNACIONAL 501Rogério Luís de C. Costa Rua Dom Pedro I, 11101/01/1971brasileira 502Chris Gane Av La Rue, XV02/02/1952norte americana 503Trish Sarson th Ave, 33303/03/1963norte americana 505Rogério Matoso Capim Praça do Centro, banco 404/04/1974brasileira 507Roger Martin Duvalle Av Ces La Vue, 55505/05/1985francesa 510José Antônio da Silva Rua 6 de Outubro, 60606/06/1976brasileira 511Elmasri th Ave, 77707/07/1967norte americana 521Navathe th Ave, 88808/08/1958indiana 533Silberschatz nd Ave, 99909/09/1969norueguesa... Exemplo 01: Exemplo 01: –Projete o nome, nascimento e nacionalidade do autor, cujo código será digitado em uma caixa de diálogo: Select nome, nascim, nacional From Autor Where Matricula = :Código BD – Stored Procedures Experimente, por exemplo, com 505
Tabela AUTOR MATR.NOMECPFENDERECONASCIMNACIONAL 501Rogério Luís de C. Costa Rua Dom Pedro I, 11101/01/1971brasileira 502Chris Gane Av La Rue, XV02/02/1952norte americana 503Trish Sarson th Ave, 33303/03/1963norte americana 505Rogério Matoso Capim Praça do Centro, banco 404/04/1974brasileira 507Roger Martin Duvalle Av Ces La Vue, 55505/05/1985francesa 510José Antônio da Silva Rua 6 de Outubro, 60606/06/1976brasileira 511Elmasri th Ave, 77707/07/1967norte americana 521Navathe th Ave, 88808/08/1958indiana 533Silberschatz nd Ave, 99909/09/1969norueguesa... Exemplo 01 (continuação): Exemplo 01 (continuação): –Projete o nome, nascimento e nacionalidade do autor, cujo código será digitado em uma caixa de diálogo: Select nome, nascim, nacional From Autor Where Matricula = :Código BD – Stored Procedures
Resultado da Consulta: NOMENASCIMNACIONAL Rogério Matoso Capim04/04/1974brasileira Exemplo 01 (continuação): Exemplo 01 (continuação): –Projete o nome, nascimento e nacionalidade do autor, cujo código será digitado em uma caixa de diálogo: Select nome, nascim, nacional From Autor Where Matricula = :Código BD – Stored Procedures Há só UMA resposta!
Exemplo 01 (continuação): –A–A–A–A seguir, crie um procedimento para executar esta situação: Inicie o SQL Editor, digite as seguintes instruções SQL, salve-a com o nome SP_Dados_Autor. CREATE orALTERPROCEDURESP_Dados_Autor (entra_Codigosmallint) RETURNS (sai_Nomevarchar(80), sai_Nascimdate, sai_Nacionalvarchar(30) ) AS BEGIN Selectnome, nascim, nacional FromAutor WhereMatricula = :entra_Codigo INTO:sai_Nome, :sai_Nascim, :sai_Nacional; SUSPEND; END BD – Stored Procedures Select nome, nascim, nacional From Autor Where Matricula = :entra_Codigo
CREATE orALTERPROCEDURESP_Dados_Autor (entra_Codigo smallint) RETURNS (sai_Nome varchar(80), sai_Nascim date, sai_Nacional varchar(30) )ASBEGIN Select nome, nascim, nacional From Autor Where Matricula = :entra_Codigo INTO:sai_Nome, :sai_Nascim, :sai_Nacional; SUSPEND;END BD – Stored Procedures Exemplo 01 (final): Exemplo 01 (final): –E para usar o procedimento criado? SELECT * FROMSP_Dados_Autor ( 505 ); CREATE orALTERPROCEDURESP_Dados_Autor (entra_Codigo smallint) RETURNS (sai_Nome varchar(80), sai_Nascim date, sai_Nacional varchar(30) )ASBEGIN Select nome, nascim, nacional From Autor Where Matricula = :entra_Codigo INTO:sai_Nome, :sai_Nascim, :sai_Nacional; SUSPEND;END
Tabela AUTOR MATR.NOMECPFENDERECONASCIMNACIONAL 501Rogério Luís de C. Costa Rua Dom Pedro I, 11101/01/1971brasileira 502Chris Gane Av La Rue, XV02/02/1952norte americana 503Trish Sarson th Ave, 33303/03/1963norte americana 505Rogério Matoso Capim Praça do Centro, banco 404/04/1974brasileira 507Roger Martin Duvalle Av Ces La Vue, 55505/05/1985francesa 510José Antônio da Silva Rua 6 de Outubro, 60606/06/1976brasileira 511Elmasri th Ave, 77707/07/1967norte americana 521Navathe th Ave, 88808/08/1958indiana 533Silberschatz nd Ave, 99909/09/1969norueguesa... BD – Stored Procedures Experimente, por exemplo, com brasileira Exemplo 02: Exemplo 02: –Agora, experimente projetar os nomes, nascimento e nacionalidades do autores, cujas nacionalidades serão lidas na caixa de diálogo: Select nome, nascim, nacional From Autor Where nacional = :In_nacionalid
Resultado da Consulta NOMENASCIMNACIONAL Rogério Luís de C. Costa01/01/1971brasileira Rogério Matoso Capim04/04/1974brasileira José Antônio da Silva06/06/1976brasileira BD – Stored Procedures Exemplo 02 (continuação): Exemplo 02 (continuação): –Agora, experimente projetar os nomes, nascimento e nacionalidades do autores, cujas nacionalidades serão lidas na caixa de diálogo: Select nome, nascim, nacional From Autor Where nacional = :In_nacionalid Há MAIS QUE UMA resposta!
Exemplo 02 (continuação): 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. Inicie o SQL Editor, digite as seguintes instruções SQL, salve-a com o nome dadosproprietario2 e a execute. CREATE orALTERPROCEDURESP_Dados_Autor2 (In_nacionalidvarchar(30)) RETURNS (out_Nomevarchar(80), out_Nascimdate, out_Nacionalvarchar(30) ) AS BEGIN INTO:out_Nome, :out_Nascim, :out_Nacional; SUSPEND; END BD – Stored Procedures Select nome, nascim, nacional From Autor Where nacional = :In_nacionalid
Exemplo 02 (continuação): 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. Inicie o SQL Editor, digite as seguintes instruções SQL, salve-a com o nome dadosproprietario2 e a execute. CREATE orALTERPROCEDURESP_Dados_Autor2 (In_nacionalid varchar(30)) RETURNS (out_Nome varchar(80), out_Nascim date, out_Nacional varchar(30) )ASBEGIN Select nome, nascim, nacional From Autor Where nacional = :In_nacionalid INTO:out_Nome, :out_Nascim, :out_Nacional; SUSPEND;END BD – Stored Procedures Oops! Problemas, já que há mais que uma resposta! Usar:FOR SELECT... DOSUSPEND;
Exemplo 02 (continuação): 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. Inicie o SQL Editor, digite as seguintes instruções SQL, salve-a com o nome dadosproprietario2 e a execute. CREATE orALTERPROCEDURESP_Dados_Autor2 (In_nacionalid varchar(30)) RETURNS (out_Nome varchar(80), out_Nascim date, out_Nacional varchar(30) )ASBEGIN FORSelect nome, nascim, nacional From Autor Where nacional = :In_nacionalid INTO:out_Nome, :out_Nascim, :out_Nacional DOSUSPEND;END BD – Stored Procedures Agora, sem o ; aqui
Exemplo 02 (continuação): Exemplo 02 (continuação): –E para usar o procedimento criado? CREATE or ALTER PROCEDURESP_Dados_Autor2 (In_nacionalidvarchar(30)) RETURNS (Out_Nome varchar(80), Out_nascim date, Out_nacional varchar(30) )ASBEGIN FOR Select nome, nascim, nacional From Autor Where nacional =:In_nacionalid INTO:Out_nome, :Out_nascim, :Out_nacional DOSUSPEND;END BD – Stored Procedures SELECT * FROMSP_Dados_Autor2 ( brasileira ); CREATE or ALTER PROCEDURESP_Dados_Autor2 (In_nacionalidvarchar(30)) RETURNS (Out_Nome varchar(80), Out_nascim date, Out_nacional varchar(30) )ASBEGIN FOR Select nome, nascim, nacional From Autor Where nacional =:In_nacionalid INTO:Out_nome, :Out_nascim, :Out_nacional DOSUSPEND;ENDSP_Dados_Autor2 (In_nacionalid ) :In_nacionalid
Exemplo 02 (final): Exemplo 02 (final): –Experimente, também: BD – Stored Procedures SELECT * FROMSP_Dados_Autor2 ( :Nacion ); SELECT * FROMSP_Dados_Autor2 ( :Nacionalidade ); SELECT * FROMSP_Dados_Autor2 ( :Digite a nacionalidade ); SELECT nome as Nome do autor FROMSP_Dados_Autor2 ( :Digite a nacionalidade );
Exercício 01: Exercício 01: –Crie um procedimento para calcular o valor médio dos livros de uma determinada editora, lida como parâmetro. –Salve-o com o nome de avglivros –Compile-o e efetive (commit) –Chame-o, via SQL, com o parâmetro predefinido (Brasoft Editora, por exemplo) –Chame-o, via SQL, com o parâmetro digitado via diálogo BD – Stored Procedures Exercício 02: 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 digitado via diálogo, baseado no procedimento avglivros.