Professional Documents
Culture Documents
10
Types de dclencheur
Un dclencheur :
est une procdure ou un bloc PL/SQL associ la base
de donnes, une table, une vue ou un schma
s'excute de faon implicite lorsqu'un vnement
particulier se produit
peut prsenter deux types diffrents :
Dclencheur applicatif : s'excute lorsqu'un vnement
se produit dans une application donne
Dclencheur de base de donnes : s'excute lorsqu'un
vnement de type donnes (par exemple une opration
LMD) ou systme (par exemple une connexion ou un
arrt) se produit dans un schma ou une base de
donnes
10-3
10-2
10-4
10-6
Moment du dclenchement
Quand le dclencheur doit-il s'excuter ?
BEFORE : excution du corps du dclencheur avant le
dclenchement de l'vnement LMD sur une table.
AFTER : excution du corps du dclencheur aprs le
dclenchement de l'vnement LMD sur une table.
INSTEAD OF : excution du corps du dclencheur au
lieu de l'instruction de dclenchement. Ce
dclencheur est utilis pour les vues qui ne peuvent
pas tre modifies autrement.
Remarque : Si plusieurs dclencheurs sont dfinis pour
le mme objet, l'ordre d'excution des dclencheurs est
arbitraire.
10-7
10-8
Dclencheur sur
instruction BEFORE
Un vnement dclencheur :
dtermine l'instruction LMD qui provoque
l'excution du dclencheur
Les types sont les suivants :
INSERT
UPDATE [OF column]
DELETE
...
10-10
Tester SECURE_EMP
Application
INSERT INTO employees (employee_id, last_name,
first_name, email, hire_date,
job_id, salary, department_id)
VALUES (300, 'Smith', 'Rob', 'RSMITH', SYSDATE,
'IT_PROG', 4500, 60);
Table EMPLOYEES
INSERT INTO EMPLOYEES...;
Dclencheur SECURE_EMP
CREATE OR REPLACE TRIGGER secure_emp
BEFORE INSERT ON employees BEGIN
IF (TO_CHAR(SYSDATE,'DY') IN ('SAT','SUN')) OR
(TO_CHAR(SYSDATE,'HH24:MI')
NOT BETWEEN '08:00' AND '18:00') THEN
RAISE_APPLICATION_ERROR(-20500, 'You may insert'
||' into EMPLOYEES table only during '
||' business hours.');
END IF;
END;
10-11
10-12
10-14
10-15
UPDATE employees
SET salary = 7000, last_name = 'Smith'
WHERE employee_id = 999;
SELECT user_name, timestamp, ...
FROM audit_emp;
10-16
10-17
10-18
Dclencheurs INSTEAD OF
Application
INSERT INTO my_view
. . .;
Dclencheur
INSTEAD OF
MY_VIEW
10-20
INSERT
TABLE1
UPDATE
TABLE2
10-21
Opration INSERT
d'un dclencheur
INSTEAD OF dans
EMP_DETAILS
3 UPDATE NEW_DEPTS
10-22
10-23
Dclencheurs
Procdures
Le dictionnaire de donnes
contient le code source dans
USER_SOURCE.
Appel explicite.
10-24
Dclencheur CHECK_SAL
Table EMPLOYEES
ligne
BEFORE
INSERT
10-25
10-26
Exemple :
DROP TRIGGER secure_emp;
10-27
10-28
Synthse
Prsentation de l'exercice 10
10-29
10-30