Buscar

(20171015212850)PBD aula10

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 8 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 8 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Programação em Banco de Dados 
Triggers de Banco de Dados 
 
Triggers (ou gatilhos) são semelhantes as procedures ou funções, 
pelo fato de serem blocos identificados PL/SQL com seções 
declarativas, executáveis e de tratamento de exceções. 
 
Por outro lado, um trigger é executado implicitamente sempre 
que o evento desencadeador acontece. Um trigger também não 
aceita argumentos. 
 
Os triggers têm várias utilidades, incluindo: 
• Manter restrições complexas de integridade 
• Fazer auditoria das informações com detalhes 
• Sinalizar automaticamente a outros programas que uma ação 
precisa acontecer quando são feitas alterações em uma tabela 
Programação em Banco de Dados 
Sintaxe para criação de triggers: 
 
CREATE OR REPLACE TRIGGER <trigger_name> 
<BEFORE | AFTER> <ACTION> [OR <ACTION> OR <ACTION>] 
ON <table_name> 
 
DECLARE 
 <variable definitions> 
BEGIN 
 <trigger_code> 
EXCEPTION 
 <exception clauses> 
END <trigger_name>; 
Programação em Banco de Dados 
Os triggers de DML são acionados em uma operação INSERT, 
UPDATE ou DELETE de uma tabela de banco de dados. Pode ser 
acionado antes ou depois que uma instrução é executada e pode 
ser acionado uma vez por linha ou uma vez por instrução. 
 
Exemplo: 
 
CREATE OR REPLACE TRIGGER ClassesAStatement1 
AFTER UPDATE ON classes 
BEGIN 
 INSERT INTO temp_table (num_col, char_col) 
 VALUES (trig_seq.NEXTVAL, ‘teste '); 
 
END ClassesAStatement1; 
 
Programação em Banco de Dados 
Identificadores de correlação em triggers de nível de linha 
 
Um trigger FOR EACH ROW é acionado uma vez por linha. Dentro 
do trigger, você pode acessar os dados da linha que está sendo 
processada atualmente. 
 
Isso é realizado através dos identificadores :NEW e :OLD. Esses 
identificadores são semelhantes a uma variável do tipo registro 
TABELA_DA_TRIGGER%ROWTYPE. 
 
Devemos observar que :OLD é NULL para triggers em instruções 
INSERT, e :NEW é NULL para instruções DELETE. 
Programação em Banco de Dados 
Exemplo: 
 
CREATE OR REPLACE TRIGGER GenerateStudentID 
 BEFORE INSERT ON students FOR EACH ROW 
BEGIN 
 SELECT student_sequence.NEXTVAL 
 INTO :new.ID 
 FROM dual; 
END GenerateStudentID; 
Programação em Banco de Dados 
A cláusula WHEN 
 
É válida apenas para triggers FOR EACH ROW. Quando presente, a 
trigger será executada apenas para aquelas linhas que satisfação 
a condição especificada. Ela será avaliada para cada linha 
processada. Os registros :new e :old também podem ser 
referenciados dentro da cláusula WHEN, mas os dois-pontos não 
são utilizados. 
Exemplo: 
CREATE OR REPLACE TRIGGER CheckCredits 
BEFORE INSERT OR UPDATE OF current_credits ON students 
FOR EACH ROW 
WHEN (new.current_credits > 20) 
BEGIN 
 /* corpo de trigger aquí */ 
END; 
Programação em Banco de Dados 
Predicados de trigger: INSERTING, UPDATING e DELETING 
 
Um mesmo trigger pode ser disparado para INSERT, UPDATE e 
DELETE. Dentro de um trigger desse tipo há três funções 
booleanas que podem ser usadas para determinar 
qual é a operação que está disparando o trigger. 
 
Exemplo: 
CREATE OR REPLACE TRIGGER LogRSChanges 
BEFORE INSERT OR DELETE OR UPDATE ON registered_students 
FOR EACH ROW 
DECLARE 
 v_ChangeType CHAR(1); 
Programação em Banco de Dados 
BEGIN 
 IF INSERTING THEN 
 v_ChangeType := 'I'; 
 ELSIF UPDATING THEN 
 v_ChangeType := 'U'; 
 ELSE 
 v_ChangeType := 'D'; 
 END IF; 
 INSERT INTO RS_audit (change_type, changed_by, timestamp, 
 old_student_id, old_department, old_course, old_grade, 
 new_student_id, new_department, new_course, new_grade) 
 VALUES (v_ChangeType, USER, SYSDATE, :old.student_id, 
 :old.department, :old.course, :old.grade, :new.student_id, 
 :new.department, :new.course, :new.grade); 
END LogRSChanges;

Continue navegando