Académique Documents
Professionnel Documents
Culture Documents
Chapitre V
Les déclencheurs
1
Introduction
• Un déclencheur (ou trigger) est un bloc PL/SQL qui s'exécutera
automatiquement suite à un événement.
2
Mécanisme général
• Une fois codé puis compilé, le déclencheur est stocké dans la base.
En cas d'événement approprié, si le déclencheur est actif, il s'exécute.
3
Déclencheurs sur table
4
Déclencheurs sur table
1- Déclencheur par ordre
Exemple 1
6
Déclencheurs sur table
Exemple 2
7
Déclencheurs sur table
2- Déclencheur ligne
• Un déclencheur ligne est exécuté pour chacune des lignes concernées
par l’exécution de l’événement (FOR EACH ROW)
8
Déclencheurs sur table
• Dans un trigger ligne, on peut faire référence à la ligne courante, celle
pour laquelle le trigger s'exécute
• Pour cette ligne, on a accès à la valeur avant l'instruction LMD (nommée
:old) et à la valeur après l'instruction (nommée :new)
9
Déclencheurs sur table
Exemple 1
Ecrire un trigger permettant de tenir compte d’une copie de sauvegarde des
informations sur les pilotes après chaque suppression ou mise à jour de la
table pilote.
Nous supposons avoir créé une table info_pilote de la manière suivante:
CREATE TABLE info_pilote (date_modif Date, V_nopilot char(4));
11
Déclencheurs sur table
Exemple 3
On peut définir une condition pour un trigger ligne (WHEN condition).
Le trigger se déclenchera pour chaque ligne vérifiant la condition.
12
Déclencheurs sur table
Exemple 3
13
Déclencheurs sur vue
14
Déclencheurs sur vue
15
Déclencheurs LDD
CREATE [OR REPLACE] TRIGGER nomDéclencheur
BEFORE | AFTER { actionStructureBase [OR actionStructureBase]… }
ON { SCHEMA | DATABASE }
{ Bloc PL/SQL | CALL nomSousProgramme(paramètres) }
STARTUP
Trigger déclenché lors de l'ouverture de l'instance (AFTER seulement)
SHUTDOWN
Trigger déclenché avant le processus d'arrêt de l'instance (non déclenché
en cas d'arrêt brutal du serveur) (BEFORE seulement)
SERVERERROR
Trigger déclenché lors d'une erreur Oracle (sauf ORA-1034, ORA-1403,
ORA-1422, ORA-1423 et ORA-4030) (AFTER seulement)
LOGOFF
Trigger déclenché lors d’une déconnexion de la BD.
LOGON
Trigger déclenché lors d’une connexion à la BD 17
Les déclencheurs systèmes
Exemple
CREATE TRIGGER espionDeconnexion
BEFORE LOGOFF ON DATABASE
BEGIN
INSERT INTO Trace VALUES (USER || ' déconnexion le ' ||
TO_CHAR(SYSDATE,'DD-MM-YYYY HH24:MI:SS'));
END;
/
18
Appels de sous-programmes
Exemples
20
Informations sur les déclencheurs
• Les informations sur les déclencheurs sont visibles à travers les vues du
dictionnaire de données:
-USER_TRIGGERS pour les déclencheurs appartenant au schéma
-ALL_TRIGGERS pour les déclencheurs appartenant aux schémas
accessibles
- DBA_TRIGGERS pour les déclencheurs appartenant à tous les schémas
22
Correction
CREATE VIEW examensPossibles
AS SELECT codMod FROM MODULE M
WHERE ( SELECT COUNT(*)
FROM INSCRIPTION I
WHERE I.codmod = M.codmod ) > 0 ;