Académique Documents
Professionnel Documents
Culture Documents
Types de déclencheurs
PL / SQL
Les déclencheurs
Ines BAKLOUTI
ines.baklouti@esprit.tn
Plan
1 Création de déclencheurs
2 Types de déclencheurs
Déclencheur de table
Déclencheur de ligne
2/13
Création de déclencheurs
Types de déclencheurs
Introduction
3/13
Création de déclencheurs
Types de déclencheurs
Plan
1 Création de déclencheurs
2 Types de déclencheurs
Déclencheur de table
Déclencheur de ligne
4/13
Création de déclencheurs
Types de déclencheurs
Création de déclencheurs
Syntaxe
CREATE [OR REPLACE] TRIGGER nom trigger
{BEFORE|AFTER|INSTEAD OF}
{INSERT|UPDATE [ OF nom colonne [, nom colonneN]] |DELETE}
OR {INSERT|UPDATE [OF nom colonne [, nom colonneN ]] |DELETE}
REFERENCING {[OLD [AS] ancien] | [NEW [AS] nouveau]}
ON nom table
[FOR EACH ROW]
[WHEN] (condition)
DECLARE
/* déclaration */
BEGIN
/* traitement */
[EXCEPTION]
END;
Notez Bien
La création d’un trigger avec le mot clé INSTEAD OF est réservée pour les triggers sur des vues
créees avec l’option WITH READ ONLY ou des vues créees sur plus qu’une table.
5/13
Création de déclencheurs Déclencheur de table
Types de déclencheurs Déclencheur de ligne
Plan
1 Création de déclencheurs
2 Types de déclencheurs
Déclencheur de table
Déclencheur de ligne
6/13
Création de déclencheurs Déclencheur de table
Types de déclencheurs Déclencheur de ligne
Types de déclencheurs
7/13
Création de déclencheurs Déclencheur de table
Types de déclencheurs Déclencheur de ligne
Types de déclencheurs
IF INSERTING THEN
...
ELSIF UPDATING THEN
...
ELSIF DELETING THEN
...
Activer/Désactiver un trigger par son nom
ALTER TRIGGER nomTrigger ENABLE;
ALTER TRIGGER nomTrigger DISABLE;
Supprimer un trigger
Drop trigger nom Trigger
8/13
Création de déclencheurs Déclencheur de table
Types de déclencheurs Déclencheur de ligne
Déclencheur de table
Exemple 1
– création de table
CREATE TABLE log (table name varchar2(30), date ins date, action varchar2(100));
– création de trigger
CREATE TRIGGER TRIG LOG
AFTER INSERT OR UPDATE
ON Employees
BEGIN
IF INSERTING THEN
INSERT INTO log(table name, date ins, action) VALUES (’Employees’, sysdate, ’INSERT’);
ELSE
INSERT INTO log(table name, date ins, action) VALUES (’Employees’, sysdate, ’UPDATE’);
END IF;
END;
– test
UPDATE employees set first name=’Wiliam’ where employee id=153;
– vérification de l’insertion dans la table
SELECT * FROM log;
9/13
Création de déclencheurs Déclencheur de table
Types de déclencheurs Déclencheur de ligne
Déclencheur de table
Exemple 2
CREATE OR REPLACE TRIGGER trig check
BEFORE INSERT OR UPDATE OF salary, department id
OR DELETE ON employees
BEGIN
CASE
WHEN INSERTING THEN
DBMS OUTPUT.PUT LINE(’Inserting’);
WHEN UPDATING(’salary’) THEN
DBMS OUTPUT.PUT LINE(’Updating salary’);
WHEN UPDATING(’department id’) THEN
DBMS OUTPUT.PUT LINE(’Updating department ID’);
WHEN DELETING THEN
DBMS OUTPUT.PUT LINE(’Deleting’);
END CASE;
END;
10/13
Création de déclencheurs Déclencheur de table
Types de déclencheurs Déclencheur de ligne
Déclencheur de ligne
Dans un trigger ligne, on peut accéder aux anciennes et nouvelles
valeurs de colonnes de la ligne. Les noms permettent de désigner ces
deux valeurs sont:
:NEW contient les nouvelles valeurs
:OLD contient les anciennes valeurs
:NEW :OLD
INSERT nouvelle valeur null
UPDATE nouvelle valeur ancienne valeur
DELETE null ancienne valeur
Remarque
Un trigger crée avec le mot clé INSTEAD OF (trigger sur vue) peut lire
les valeurs de :NEW et :OLD mais ne peut pas les changer. On peut
concevoir un déclencheur INSTEAD OF pour déterminer quelle opération
prévue et faire les opérations LMD appropriées sur les tables
correspondantes.
11/13
Création de déclencheurs Déclencheur de table
Types de déclencheurs Déclencheur de ligne
Déclencheur de ligne
Exemple 1
CREATE OR REPLACE TRIGGER trig dep
BEFORE INSERT OR UPDATE OR DELETE
ON DEPARTMENTS
FOR EACH ROW
BEGIN
IF INSERTING THEN
dbms output.put line(’Insertion’);
END IF;
IF UPDATING THEN
dbms output.put line(’Modification’);
END IF;
IF DELETING THEN
dbms output.put line(’Suppression’);
END IF;
END;
– test
UPDATE departments set department name = lower(substr(department name,1,1))
||substr(department name,2,length(department name)-1);
12/13
Création de déclencheurs Déclencheur de table
Types de déclencheurs Déclencheur de ligne
Déclencheur de ligne
Exemple 2
CREATE OR REPLACE TRIGGER trig insert
BEFORE INSERT
ON departments
FOR EACH ROW
WHEN (new.department id < 270)
BEGIN
:new.department id := :new.department id+10;
END;
13/13