Académique Documents
Professionnel Documents
Culture Documents
Université de Sousse
Chapitre6 :
Les déclencheurs (Triggers)
2022-2023
I. Introduction
Un trigger (déclencheur) est un programme qui se déclenche automatiquement suite
à un événement de mise à jour.
Les triggers peuvent servir à :
vérifier des contraintes que l'on ne peut pas définir de façon déclarative
2
II. Création d'un Trigger : Syntaxe
Syntaxe :
CREATE [OR REPLACE] TRIGGER nom_trig
BEFORE|AFTER
INSERT|DELETE|UPDATE ON nom_table
[ FOR EACH ROW]
[ WHEN condition]
-- Bloc PL/SQL contenant le corps du trigger
Si cette clause est absente, alors le trigger va se déclencher une seule fois pour toute
l'instruction. On parle alors de trigger instruction.
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 DML (nommée :old) et à
la valeur après l'instruction (nommée :new).
:old :new
Insert NULL ligne insérée
Delete ligne supprimée NULL
Update ligne avant modif ligne après modif
4
CREATE TABLE EMP_LOG (
emp_id integer NOT NULL,
date_evt date,
msg VARCHAR(50));
5
III. La Clause When
définit une condition pour un trigger ligne : le trigger se déclenchera pour chaque ligne
vérifiant la condition.
Exemple 1: Le trigger suivant insère une ligne dans une table de log, lorsque le salaire
d'un employé diminue.
Instructions SQL
SELECT, INSERT, UPDATE, DELETE à l’exception de COMMIT et ROLLBACK
Instructions de contrôle de flux
IF condition THEN instructions pl/sql ELSE instructions pl/sql END IF;
LOOP instructions pl/sql EXIT WHEN (condition) END LOOP;
WHILE condition LOOP instructions pl/sql END LOOP;
FOR variable IN start..stop LOOP instructions pl/sql END LOOP;
8
III. La Clause When
Exemple 3:
9
IV. Le corps du trigger
e bloc d’instructions PL/SQL peut contenir :
Génération des exceptions
raise_application_error(nombre,message)
Curseurs
Procédures et fonctions
Gestion des exceptions
10
IV. Le corps du trigger
xemple
La table Salgrade qui définit les salaires minimal et maximal de chaque grade d'employé.
Définir un trigger pour vérifier, avant une insertion ou modification de salaire dans la
table EMP, que le nouveau salaire soit valide (c-a-d ne soit pas inferieur à losal et ne
soit pas supérieur à hisal) .
Il faut traiter les cas de non validité de salaire dans une exception en affichant un
message disant que le salaire est hors rang.
Il faut aussi traiter le cas où le grade à insérer n'existe pas dans la table SALGRADE.
11
CREATE TRIGGER sal_check
BEFORE INSERT OR UPDATE OF sal ON emp
FOR EACH ROW
DECLARE
minsal NUMBER;
maxsal NUMBER;
sal_hors_rang EXCEPTION;
BEGIN
SELECT losal, hisal INTO minsal, maxsal FROM salgrade
WHERE grade= :new.grade;
IF (:new.sal < minsal OR :new.sal > maxsal) THEN
RAISE sal_hors_rang;
END IF;
EXCEPTION
WHEN sal_hors_rang THEN
DBMS_OUTPUT.PUT_LINE('Salaire' || TO_CHAR (:new.sal) || ' hors rang');
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE( 'Igrade nvalide ');
END; 12
II. Trigger : création
ctivation / désactivation d'un seul déclencheur
13