Escolar Documentos
Profissional Documentos
Cultura Documentos
Banco de Dados
PL/SQL
7. Procedures
• Stored Procedure ou simplesmente procedure,
é um algoritmo independente que pode ser
chamado por qualquer aplicação;
• Stored Procedure são armazenadas no SGBD
(no servidor);
• Stored Procedure trocam informações com a
aplicação através de parâmetros;
• Stored Procedure são executadas quando
chamado por uma aplicação;
• Stored Procedure são executadas pelo servidor.
7. Procedures
• Procedures PL/SQL comportam-se muito
semelhantemente aos procedures em outras
linguagens de programação.
• Aqui está um exemplo de um procedure
PL/SQL addtupla1 que, dado um inteiro i,
insere a tupla (i, 'xxx') dentro da relação T2:
CREATE TABLE T2 (
a INTEGER,
b CHAR(10)
);
EXEC addtupla1(1);
7. Procedures
• Sintaxe
CREATE [OR REPLACE] PROCEDURE procedure_name
[(argument [{IN | OUT | IN OUT}] type,
...
argument [{IN | OUT | IN OUT}] type)] {IS | AS}
procedure body
• Cláusulas
• procedure_name - nome do procedimento a ser criado.
• or replace - se já existir um procedimento com esse nome
este será derrubado para que o novo procedimento possa
ser criado.
• argument - são os parâmetros de entrada e saída que
podem ser usados pelo procedimento.
7. Procedures
• Uma procedure é introduzida pelas palavras-
reservadas CREATE PROCEDURE seguidas por
um nome de procedimento e seus
parâmetros.
• Uma alternativa é seguir o comando CREATE
por OR REPLACE.
• A vantagem de fazer assim é que se você já
tiver feito a definição, você não obterá um
erro. Por outro lado, se a definição anterior for
um procedure diferente com o mesmo nome,
você não será alertado, e a procedure antiga
será perdida.
7. Procedures
• Podem existir quaisquer número de
parâmetros, cada um seguido por um modo e
um tipo.
• Alguns exemplos:
• ... INSERT ON R ...
• ... INSERT OR DELETE OR UPDATE ON R ...
• ... UPDATE OF A, B OR INSERT ON R ...
8. Triggers
• Se FOR EACH ROW for especificado, o trigger é
row-level;
• Do contrário, o trigger será statement-level.
• Para um trigger row-level, uma restrição pode
ser especificada na cláusula WHEN, envolvida
por parênteses.
• A restrição do trigger é uma condição SQL que
deve ser satisfeita para que o Oracle dispare o
trigger. Esta condição não pode conter
subconsultas.
• Sem a cláusula WHEN, um trigger é disparado
por todo evento engatilhado.
8. Triggers
• <trigger_body> é um bloco PL/SQL, e não uma
sequência de instruções SQL.
CREATE TABLE T5 (
c CHAR(10),
d INTEGER
);
8. Triggers
• Criamos um trigger que deve inserir uma tupla
em T5 quando uma tupla for inserida em T4.
• Especificamente, o trigger checa se a nova
tupla tem um primeiro componente menor ou
igual a 10, e se sim insere a tupla oposta em
T5:
CREATE TRIGGER trig1
AFTER INSERT ON T4
FOR EACH ROW
WHEN (NEW.a <= 10)
BEGIN
INSERT INTO T5 VALUES(:NEW.b, :NEW.a);
END;
/
8. Triggers
• As variáveis especiais NEW e OLD estão
disponíveis para fazerem referência às tuplas
nova e velha respectivamente.
• No corpo do trigger, NEW e OLD deve ser
precedidas pelo caractere dois pontos (":"),
mas na cláusula WHEN, elas não tem um dois
pontos precedendo- as!
• Executar a instrução CREATE TRIGGER apenas
cria o trigger mas não o executa.
• Apenas um evento engatilhado, tal como uma
inserção em T4 neste exemplo, faz com que o
trigger seja disparado.
8. Triggers
• Para ver informações sobre triggers, utilize as
consultas abaixo:
SELECT trigger_name FROM user_triggers;
Tabelas:
Aluno (matricula NUMERICO , nome TEXTO, codigo_curso TEXTO);
Delecao (usuario TEXTO, qtd NUMERICO, data DATA);
8. Triggers (exemplo)
CREATE TABLE aluno (
matricula NUMBER ,
nome VARCHAR2(20),
codigo_curso VARCHAR2(2));
Exemplo:
Parâmetros:
Entrada: codigo NUMERICO
Saída: cliente TEXTO, email TEXTO
Trabalho de Casa
Tarefa 5:
Criar uma procedure que deverá receber o CPF de uma pessoa sem
formatação (apenas números) e a partir deste dado retornar o seu
CPF formatado.
Exemplo:
ENTRADA: 12345678910
SAIDA: 123.456.789-10
Dica:
utilize a função substr.
Parâmetros:
Entrada: cpf_semformat TEXTO
Saída: cpf_comformat TEXTO