PL/SQL
Subprogramas
Curso de Sistemas de Informação
Disciplina de Banco de Dados – IF976
Profa. Bernadette Farias Lóscio
bfl@cin.ufpe.br
Slides preparados por
Danusa Ribeiro Cunha
(drbc@cin.ufpe.br)
Exercícios
• Crie um cursor que apresente os dados de um
Professor passando o SIAPE.
• Crie um cursor que exiba o nome da disciplina
e o nome do professor com SIAPE = 1234
ensina.
Subprogramas
• Procedimentos, funções e pacotes que são
armazenados na base de dados
• Em geral não são alterados depois de
construídos e são executados muitas vezes
• São executados explicitamente, através de
uma chamada a eles
Procedimentos
CREATE [OR REPLACE] PROCEDURE <nome>
[(parâmetro [{IN | OUT | IN OUT}] tipo, ....)]
{IS | AS}
<definições de variáveis>
BEGIN <corpo-do-procedimento>
END <nome>;
• Sintaxe
4
Observar que não se usa a Cláusula DECLARE
CREATE OR REPLACE PROCEDURE InsereCarro (
p_chassi carro.chassi%TYPE,
p_modelo carro.modelo%TYPE,
p_km_carro carro.km_carro%TYPE,
p_data_carro carro.data_carro %TYPE) AS
BEGIN
-- Inserir nova tupla na tabela carro
INSERT INTO carro (chassi, modelo, km_carro, data_carro)
VALUES (p_chassi, p_modelo, p_km_carro, p_data_carro);
COMMIT;
END InsereCarro;
/
Procedimentos
• Exemplo: Procedimento para inserir um novo
veículo na tabela Carro
5
Procedimentos
• Para ser chamada em outros blocos PL/SQL
InsereCarro('235-456-YWR','Celta', 100,
to_date('15/05/2002','dd/mm/yyyy'));
6
• Para ser chamada na interface de
caracteres
EXEC InsereCarro('235-456YWR','Celta', 100,
to_date('15/05/2002','dd/mm/yyyy'));
Funções
• São chamadas como parte de uma expressão,
retornando um valor à expressão
• No corpo da função deve aparecer um
RETURN para retornar um valor ao ambiente
RETURN <expressão>;
7
CREATE [OR REPLACE ]FUNCTION <nome>
[(parâmetro [{IN | OUT | IN OUT}] tipo, ....)]
RETURN <tipo-retorno> {IS | AS}
BEGIN <corpo-da-função>
END <nome>;
Funções
• Exemplo: Uma função para calcular o valor de
uma nova chave a partir da maior existente no
BD
CREATE OR REPLACE FUNCTION calcula RETURN
VARCHAR2 IS
retorno VARCHAR2(20);
BEGIN
select max(id) into retorno from categoria;
retorno := retorno +1;
RETURN retorno;
END calcula;
/
8
Funções
• Para ser chamada em outros blocos PL/SQL
v_valor := calcula;
Variável declarada no bloco PL
• Para ser chamada na interface de
caracteres
SELECT calcula FROM dual;
9
Triggers (Gatilhos)
• Procedimentos armazenados no SGBD que são
automaticamente ativados em resposta a determinadas
mudanças que ocorrem no BD
– Em geral não são modificados e executam várias vezes
– São executados implicitamente sempre que ocorre o
evento que os dispara
– Semelhantes a procedimentos, mas não podem ser locais
em relação a um bloco
– Não aceitam parâmetros
10
Triggers (Gatilhos)
• Um trigger é composto por quatro partes
Momento
Evento
Tipo
Ação
11
Triggers - Momento
• Corresponde ao tempo em que o trigger
deve ser executado
– BEFORE, AFTER ou INSTEAD OF
Executar ação ANTES do
evento
para o qual foi criado
Executar ação
APÓS o evento
para o qual foi criado
Executar ação
NO LUGAR do evento
para o qual foi criado
12
Triggers - Eventos
• Modificações no banco de dados
– No relacional (DML): operações INSERT, DELETE,
UPDATE
– No orientado-a-objetos também na chamada de
métodos
– Operações de transação: COMMIT, ABORT, PREPARE-
TO-COMMIT
– Ações de DBA: CREATE, ALTER, DROP,
SERVERERROR,LOGON,LOGOFF,STARTUP, SHUTDOWN,
GRANT, REVOKE, ...
– Eventos temporais, eventos externos
– A composição dos eventos acima
13
Triggers - Tipo
• Só aplicável a eventos de DML
– Linha
• Acionado para cada linha afetada
• UPDATE de atributo requer a definição do
atributo após OF
–UPDATE OF <atributo>
– Comando
• Acionado independentemente do comando
atualizar ou não uma ou mais linhas
• Não permite acesso às linhas atualizadas
14
Triggers - Ações
• Bloco PL/SQL executado em razão do evento
– Requer a utilização de predicados lógicos
quando o trigger tem mais de um evento DML
Predicado Significado
INSERTING Quando o trigger for
disparado por um INSERT
UPDATING Quando o trigger for
disparado por um UPDATE
DELETING Quando o trigger for
disparado por um DELETE
15
Triggers - Ações
• Especificação de ações
– Pode ser uma seqüência de comandos de
modificação e acesso aos dados
– Pode ser implícita, ou seja, a transação é abortada
– Pode indicar um rollback da transação
– Pode substituir a operação que causou o evento,
através da palavra-chave instead (no caso do
Oracle só para views)
16
Triggers
• Podem ser utilizados para
– Manter restrições de integridade complexas
– Efetuar auditoria às informações de uma tabela,
registrando as alterações efetuadas e quem as
efetuou (log seletivo)
– Indicar automaticamente a outros programas que é
necessário efetuar uma ação, quando são efetuadas
alterações em uma tabela ou BD
– Gerar valor de coluna (atributo)
– Garantir regras de negócios
– Controle de versões
– Garantir restrições de acesso
17
• Use gatilhos para garantir que quando uma
operação for processada, ações relacionadas
serão executadas
• Não defina gatilhos para refazer ações já
existentes no SGBD
• Limite o tamanho de gatilhos (≈ 60 linhas)
– Usar procedure
• Use gatilhos apenas para ações globais
• Não crie gatilhos recursivos
• Use gatilhos ponderadamente
18
Triggers - Recomendações
Ativação de Triggers
• Ativação ocorre quando comandos são executados sobre uma
tabela (DML) ou BD (DBA)
• Uso de BEFORE possibilita o acesso a valores antigos (já
existentes no BD - OLD) e novos (recém-inseridos - NEW)
• Ativando gatilhos UMA ou VÁRIAS vezes
– A opção FOR EACH ROW
• Determina se o gatilho é do tipo row trigger (linha) ou
statement trigger (comando)
– Se especificada, o gatilho é executado UMA vez
para cada tupla afetada pelo evento
– Se omitida, o gatilho é executado UMA ÚNICA vez
para cada ocorrência de evento
19
Ativação Condicional de Triggers
• A opção WHEN
– É usada apenas com row triggers
– Consiste em uma expressão booleana – SQL
– É avaliada para cada tupla afetada pelo evento
– Apenas se o resultado da sua avaliação for verdadeiro, a
ação é executada
– Não tem efeito sobre a execução do evento
– Não pode incluir
• Subconsultas
• Expressões em PL/SQL
• Funções definidas pelo usuário
20
Triggers
CREATE [OR REPLACE] TRIGGER <nome>
[BEFORE | AFTER | INSTEAD OF ] <evento>
ON <tabela>
[REFERENCING NEW AS <novo_nome>
OLD AS <antigo_nome> ]
[FOR EACH ROW [ WHEN <condição>]]
[ DECLARE [PRAGMA
AUTONOMOUS_TRANSACTION ]]
BEGIN <corpo-do-procedimento>
END <nome>;
Sintaxe
21
Triggers
• Cláusula INSTEAD OF
– Só para views
• Cláusula REFERENCING
– Evitar conflito com new ou old
• Cláusula FOR EACH ROW
– Trigger de linha (row trigger)
• Cláusula WHEN
Colocar condição
• Cláusula PRAGMA_AUTONOMUS
Controle de transação
22
Triggers
• Restrições
– No Oracle, não podem emitir instruções de
controle de transação
• COMMIT, ROLLBACK ou SAVEPOINT
– Não podem chamar nenhuma função que faça
isso
– Não podem declarar variável LONG ou LONG RAW
23
Triggers - Exemplo
• Na devolução do carro, alterar a quilometragem do
carro em função da quilometragem final
CREATE OR REPLACE TRIGGER altera_km
AFTER UPDATE ON locacao
FOR EACH ROW
BEGIN
IF :NEW.data_entrega IS NOT NULL THEN
UPDATE carro SET km_carro = :NEW.km_final
WHERE chassi = :NEW.chassi;
END IF;
END;
/
Variável contendo
valores inseridos
:OLD -Variável contendo
valores anteriores
24
Triggers - Exemplo
• Impedir inserção de valor inválido
CREATE OR REPLACE TRIGGER verifica_situacao
BEFORE INSERT OR UPDATE ON locacao
FOR EACH ROW
BEGIN
IF :NEW.km_final < :NEW.km_inicial THEN
RAISE_APPLICATION_ERROR( -20011, ‘Km_Final <
Km_Inicial’);
END IF;
END;
/
Criar código para
Mensagem de erro
25
Triggers
• Tabela mutante
– Em alguns triggers é preciso fazer referência a
valores da tabela que está sendo alterada
– Em geral, quando um trigger tenta examinar a
própria tabela que está sofrendo a ação
– Também pode acontecer quando examinar uma
tabela pai em um update/delete cascading
26
Um Trigger está tentando modificar ou
examinar um dado que ainda está
sendo modificado
Triggers
• Suponha as duas tabelas a seguir:
Triggers
• Fluxo de Ações
Triggers
• Utilizar o comando
PRAGMA AUTONOMOUS_TRANSACTION;
Exercício
• Crie uma função que retorne quantas
disciplinas um professor ministra. A função
recebe como parâmetro o siape do professor.
• Crie um procedimento que aumenta o salário
do professor em 10% do professor com siape =
5522
• Melhore o procedimento anterior para que
receba a matricula do funcionário e aumente
esse valor.

Mais conteúdo relacionado

PPTX
Net Coders Ladies SQL
PPTX
aula - aula de base dados 2 Triggers.pptx
PPTX
Stored Procedures and Triggers
PPTX
Utilizando views, stored procedures e triggers
PPTX
Treinamento Oracle Forms
PPTX
programaçãoparabancodedadospdfestudos.pptx
PDF
Stored procedure
Net Coders Ladies SQL
aula - aula de base dados 2 Triggers.pptx
Stored Procedures and Triggers
Utilizando views, stored procedures e triggers
Treinamento Oracle Forms
programaçãoparabancodedadospdfestudos.pptx
Stored procedure

Semelhante a Aula09 - PL SQL - Subprogramas.pptx (20)

PDF
KrahoDB
ODP
Stored procedure
PPTX
PHP - estruturas controlo.pptx
ODP
Aprofundamento de DDL e DML
PDF
MySQL - Aprendendo Banco de Dados - Aula 10.pdf
PPTX
Triggers no SQL Server
PDF
[ServiceNow] Governança das Instâncias
PDF
LabMM3 - Aula teórica 08
PDF
Views Oracle Database
PPTX
Apresentação interbase (atualização 2)
PPT
Modulo 15 PSI
PDF
(A10) LabMM3 - JavaScript - Subalgoritmos
PPTX
Modulo-02-Aula-04-certificao-sqlser.pptx
PPTX
Conceitos base de programação - parte 2
PDF
Minicurso PostgreSQL
PDF
Resumo linguagem c para microcontroladores PIC usando MikroC
PDF
Resumo Linguagem C
PPTX
Visualg
PDF
UNIFAL - MySQL Stored Routines - 5.0/5.6
PDF
Aula 11
KrahoDB
Stored procedure
PHP - estruturas controlo.pptx
Aprofundamento de DDL e DML
MySQL - Aprendendo Banco de Dados - Aula 10.pdf
Triggers no SQL Server
[ServiceNow] Governança das Instâncias
LabMM3 - Aula teórica 08
Views Oracle Database
Apresentação interbase (atualização 2)
Modulo 15 PSI
(A10) LabMM3 - JavaScript - Subalgoritmos
Modulo-02-Aula-04-certificao-sqlser.pptx
Conceitos base de programação - parte 2
Minicurso PostgreSQL
Resumo linguagem c para microcontroladores PIC usando MikroC
Resumo Linguagem C
Visualg
UNIFAL - MySQL Stored Routines - 5.0/5.6
Aula 11
Anúncio

Último (12)

PDF
SLIDES - AULA 7 - SWING - Cleyton Souza - IFPB
PPT
05_slide especificacao de sistemas de software e a uml UML.ppt
PPT
09_Evolucao de software e_Refatoracao.ppt
PDF
SLIDES - AULA 2 - INTRODUÇÃO - Material de Cleyton Souza - IFPB
PPT
00_Apresentacao sobre o livro do sommerville_ES.ppt
PPT
06_slide de Arquitetura_de_Software .ppt
PPT
03_slide de Gerenciamento de Projetos .ppt
PDF
SLIDES - AULA 5 - HERANÇA - Material de Cleyton Souza - IFPB
PDF
SLIDES - AULA 1 - APRESENTAÇÃO - Material de Cleyton Souza - IFPB
PPT
10_ slides de Reuso sommerville cap 10.ppt
PPT
07_slides de Estilos_Arquiteturais sommerville.ppt
PDF
SLIDES - AULA 3 - CLASSES E OBJETOS EM JAVA - Material de Cleyton Souza - IFPB
SLIDES - AULA 7 - SWING - Cleyton Souza - IFPB
05_slide especificacao de sistemas de software e a uml UML.ppt
09_Evolucao de software e_Refatoracao.ppt
SLIDES - AULA 2 - INTRODUÇÃO - Material de Cleyton Souza - IFPB
00_Apresentacao sobre o livro do sommerville_ES.ppt
06_slide de Arquitetura_de_Software .ppt
03_slide de Gerenciamento de Projetos .ppt
SLIDES - AULA 5 - HERANÇA - Material de Cleyton Souza - IFPB
SLIDES - AULA 1 - APRESENTAÇÃO - Material de Cleyton Souza - IFPB
10_ slides de Reuso sommerville cap 10.ppt
07_slides de Estilos_Arquiteturais sommerville.ppt
SLIDES - AULA 3 - CLASSES E OBJETOS EM JAVA - Material de Cleyton Souza - IFPB
Anúncio

Aula09 - PL SQL - Subprogramas.pptx

  • 1. PL/SQL Subprogramas Curso de Sistemas de Informação Disciplina de Banco de Dados – IF976 Profa. Bernadette Farias Lóscio bfl@cin.ufpe.br Slides preparados por Danusa Ribeiro Cunha (drbc@cin.ufpe.br)
  • 2. Exercícios • Crie um cursor que apresente os dados de um Professor passando o SIAPE. • Crie um cursor que exiba o nome da disciplina e o nome do professor com SIAPE = 1234 ensina.
  • 3. Subprogramas • Procedimentos, funções e pacotes que são armazenados na base de dados • Em geral não são alterados depois de construídos e são executados muitas vezes • São executados explicitamente, através de uma chamada a eles
  • 4. Procedimentos CREATE [OR REPLACE] PROCEDURE <nome> [(parâmetro [{IN | OUT | IN OUT}] tipo, ....)] {IS | AS} <definições de variáveis> BEGIN <corpo-do-procedimento> END <nome>; • Sintaxe 4 Observar que não se usa a Cláusula DECLARE
  • 5. CREATE OR REPLACE PROCEDURE InsereCarro ( p_chassi carro.chassi%TYPE, p_modelo carro.modelo%TYPE, p_km_carro carro.km_carro%TYPE, p_data_carro carro.data_carro %TYPE) AS BEGIN -- Inserir nova tupla na tabela carro INSERT INTO carro (chassi, modelo, km_carro, data_carro) VALUES (p_chassi, p_modelo, p_km_carro, p_data_carro); COMMIT; END InsereCarro; / Procedimentos • Exemplo: Procedimento para inserir um novo veículo na tabela Carro 5
  • 6. Procedimentos • Para ser chamada em outros blocos PL/SQL InsereCarro('235-456-YWR','Celta', 100, to_date('15/05/2002','dd/mm/yyyy')); 6 • Para ser chamada na interface de caracteres EXEC InsereCarro('235-456YWR','Celta', 100, to_date('15/05/2002','dd/mm/yyyy'));
  • 7. Funções • São chamadas como parte de uma expressão, retornando um valor à expressão • No corpo da função deve aparecer um RETURN para retornar um valor ao ambiente RETURN <expressão>; 7 CREATE [OR REPLACE ]FUNCTION <nome> [(parâmetro [{IN | OUT | IN OUT}] tipo, ....)] RETURN <tipo-retorno> {IS | AS} BEGIN <corpo-da-função> END <nome>;
  • 8. Funções • Exemplo: Uma função para calcular o valor de uma nova chave a partir da maior existente no BD CREATE OR REPLACE FUNCTION calcula RETURN VARCHAR2 IS retorno VARCHAR2(20); BEGIN select max(id) into retorno from categoria; retorno := retorno +1; RETURN retorno; END calcula; / 8
  • 9. Funções • Para ser chamada em outros blocos PL/SQL v_valor := calcula; Variável declarada no bloco PL • Para ser chamada na interface de caracteres SELECT calcula FROM dual; 9
  • 10. Triggers (Gatilhos) • Procedimentos armazenados no SGBD que são automaticamente ativados em resposta a determinadas mudanças que ocorrem no BD – Em geral não são modificados e executam várias vezes – São executados implicitamente sempre que ocorre o evento que os dispara – Semelhantes a procedimentos, mas não podem ser locais em relação a um bloco – Não aceitam parâmetros 10
  • 11. Triggers (Gatilhos) • Um trigger é composto por quatro partes Momento Evento Tipo Ação 11
  • 12. Triggers - Momento • Corresponde ao tempo em que o trigger deve ser executado – BEFORE, AFTER ou INSTEAD OF Executar ação ANTES do evento para o qual foi criado Executar ação APÓS o evento para o qual foi criado Executar ação NO LUGAR do evento para o qual foi criado 12
  • 13. Triggers - Eventos • Modificações no banco de dados – No relacional (DML): operações INSERT, DELETE, UPDATE – No orientado-a-objetos também na chamada de métodos – Operações de transação: COMMIT, ABORT, PREPARE- TO-COMMIT – Ações de DBA: CREATE, ALTER, DROP, SERVERERROR,LOGON,LOGOFF,STARTUP, SHUTDOWN, GRANT, REVOKE, ... – Eventos temporais, eventos externos – A composição dos eventos acima 13
  • 14. Triggers - Tipo • Só aplicável a eventos de DML – Linha • Acionado para cada linha afetada • UPDATE de atributo requer a definição do atributo após OF –UPDATE OF <atributo> – Comando • Acionado independentemente do comando atualizar ou não uma ou mais linhas • Não permite acesso às linhas atualizadas 14
  • 15. Triggers - Ações • Bloco PL/SQL executado em razão do evento – Requer a utilização de predicados lógicos quando o trigger tem mais de um evento DML Predicado Significado INSERTING Quando o trigger for disparado por um INSERT UPDATING Quando o trigger for disparado por um UPDATE DELETING Quando o trigger for disparado por um DELETE 15
  • 16. Triggers - Ações • Especificação de ações – Pode ser uma seqüência de comandos de modificação e acesso aos dados – Pode ser implícita, ou seja, a transação é abortada – Pode indicar um rollback da transação – Pode substituir a operação que causou o evento, através da palavra-chave instead (no caso do Oracle só para views) 16
  • 17. Triggers • Podem ser utilizados para – Manter restrições de integridade complexas – Efetuar auditoria às informações de uma tabela, registrando as alterações efetuadas e quem as efetuou (log seletivo) – Indicar automaticamente a outros programas que é necessário efetuar uma ação, quando são efetuadas alterações em uma tabela ou BD – Gerar valor de coluna (atributo) – Garantir regras de negócios – Controle de versões – Garantir restrições de acesso 17
  • 18. • Use gatilhos para garantir que quando uma operação for processada, ações relacionadas serão executadas • Não defina gatilhos para refazer ações já existentes no SGBD • Limite o tamanho de gatilhos (≈ 60 linhas) – Usar procedure • Use gatilhos apenas para ações globais • Não crie gatilhos recursivos • Use gatilhos ponderadamente 18 Triggers - Recomendações
  • 19. Ativação de Triggers • Ativação ocorre quando comandos são executados sobre uma tabela (DML) ou BD (DBA) • Uso de BEFORE possibilita o acesso a valores antigos (já existentes no BD - OLD) e novos (recém-inseridos - NEW) • Ativando gatilhos UMA ou VÁRIAS vezes – A opção FOR EACH ROW • Determina se o gatilho é do tipo row trigger (linha) ou statement trigger (comando) – Se especificada, o gatilho é executado UMA vez para cada tupla afetada pelo evento – Se omitida, o gatilho é executado UMA ÚNICA vez para cada ocorrência de evento 19
  • 20. Ativação Condicional de Triggers • A opção WHEN – É usada apenas com row triggers – Consiste em uma expressão booleana – SQL – É avaliada para cada tupla afetada pelo evento – Apenas se o resultado da sua avaliação for verdadeiro, a ação é executada – Não tem efeito sobre a execução do evento – Não pode incluir • Subconsultas • Expressões em PL/SQL • Funções definidas pelo usuário 20
  • 21. Triggers CREATE [OR REPLACE] TRIGGER <nome> [BEFORE | AFTER | INSTEAD OF ] <evento> ON <tabela> [REFERENCING NEW AS <novo_nome> OLD AS <antigo_nome> ] [FOR EACH ROW [ WHEN <condição>]] [ DECLARE [PRAGMA AUTONOMOUS_TRANSACTION ]] BEGIN <corpo-do-procedimento> END <nome>; Sintaxe 21
  • 22. Triggers • Cláusula INSTEAD OF – Só para views • Cláusula REFERENCING – Evitar conflito com new ou old • Cláusula FOR EACH ROW – Trigger de linha (row trigger) • Cláusula WHEN Colocar condição • Cláusula PRAGMA_AUTONOMUS Controle de transação 22
  • 23. Triggers • Restrições – No Oracle, não podem emitir instruções de controle de transação • COMMIT, ROLLBACK ou SAVEPOINT – Não podem chamar nenhuma função que faça isso – Não podem declarar variável LONG ou LONG RAW 23
  • 24. Triggers - Exemplo • Na devolução do carro, alterar a quilometragem do carro em função da quilometragem final CREATE OR REPLACE TRIGGER altera_km AFTER UPDATE ON locacao FOR EACH ROW BEGIN IF :NEW.data_entrega IS NOT NULL THEN UPDATE carro SET km_carro = :NEW.km_final WHERE chassi = :NEW.chassi; END IF; END; / Variável contendo valores inseridos :OLD -Variável contendo valores anteriores 24
  • 25. Triggers - Exemplo • Impedir inserção de valor inválido CREATE OR REPLACE TRIGGER verifica_situacao BEFORE INSERT OR UPDATE ON locacao FOR EACH ROW BEGIN IF :NEW.km_final < :NEW.km_inicial THEN RAISE_APPLICATION_ERROR( -20011, ‘Km_Final < Km_Inicial’); END IF; END; / Criar código para Mensagem de erro 25
  • 26. Triggers • Tabela mutante – Em alguns triggers é preciso fazer referência a valores da tabela que está sendo alterada – Em geral, quando um trigger tenta examinar a própria tabela que está sofrendo a ação – Também pode acontecer quando examinar uma tabela pai em um update/delete cascading 26 Um Trigger está tentando modificar ou examinar um dado que ainda está sendo modificado
  • 27. Triggers • Suponha as duas tabelas a seguir:
  • 29. Triggers • Utilizar o comando PRAGMA AUTONOMOUS_TRANSACTION;
  • 30. Exercício • Crie uma função que retorne quantas disciplinas um professor ministra. A função recebe como parâmetro o siape do professor. • Crie um procedimento que aumenta o salário do professor em 10% do professor com siape = 5522 • Melhore o procedimento anterior para que receba a matricula do funcionário e aumente esse valor.