Les triggers
Oracle vous permet de définir des procédures, appelées triggers, de la base de données.
Ces procédures sont associées à une table et sont exécutées implicitement lorsque vous
lancez des ordres SQL de type insertion,
modification, suppression (INSERT, UPDATE, DELETE).
Les triggers
Principes d’utilisation des triggers
Les triggers permettent d’exécuter automatiquement
des procédures centralisées dans la base de données, quel que soit l’utilisateur ou l’application qui les
déclenche. Ils sont souvent utilisés pour construire des interfaces interapplications et s’avèrent très simples
et très souples dans leur maniement.
Les triggers se déclenchent sur des actions modifiant les données de la table sur laquelle porte le trigger. Si cette table est accessible en lecture uniquement, aucun trigger ne sera déclenché.
Les triggers
N’utilisez pas les triggers pour effectuer des contrôles d’intégrité des données qui peuvent
être réalisés par des contraintes d’intégrité. Ces contraintes positionnées au niveau des
tables sont puissantes et très optimisées.
Les triggers
Nous voulons constituer un fichier historique de toutes les modifications apportées au salaire des employés :
CREATE TABLE historique ( empno NUMBER(5),
ancien_sal NUMBER(7,2), nouveau_sal NUMBER(7,2), dat_modif DATE,
CREATE OR REPLACE TRIGGER trig_salaire
AFTER INSERT OR UPDATE OR DELETE ON emp FOR EACH ROW
DECLARE
dat_m DATE := SYSDATE ; BEGIN
IF INSERTING THEN INSERT INTO historique VALUES (:new.empno,null,:new.sal,date_m,user,'NOUVEAU' );
ELSIF UPDATING ('SAL') THEN INSERT INTO historique
VALUES(:old.empno,:old.sal,:new.sal,quand,user,'MODIFIE');
ELSIF DELETING THEN INSERT INTO historique
VALUES (:old.empno,:old.sal,null,quand,user,'SUPPRIME');
END IF;
END;/
Les triggers
CREATE OR REPLACE TRIGGER crée un trigger DROP TRIGGER supprime un trigger
ALTER TRIGGER nom_du_trigger ENABLE ; -- active le trigger
ALTER TRIGGER nom_du_trigger DISABLE;
-- désactive le trigger
Les triggers
Cette opération peut être étendue en un seul
ordre SQL à l’ensemble des triggers qui portent sur une table :
ALTER TABLE table_ou_sont_des_triggers DISABLE ALL TRIGGERS ;
ALTER TABLE table_ou_sont_des_triggers ENABLE ALL TRIGGERS ;
Les triggers
Le type d’action qui déclenche le trigger détermine son moment d’exécution ; il est précisé au début de l’écriture du code du trigger. Les actions sont les
suivantes : INSERT ; UPDATE ; DELETE.
Le trigger peut être déclenché avant ou après cette action : BEFORE ou AFTER.
Les triggers
Le trigger peut être déclenché avant ou après cette action : BEFORE ou AFTER.
Les triggers
FOR EACH ROW
Pour un ordre SQL modifiant plusieurs enregistrements simultanément, la clause
FOR EACH ROW détermine le déclenchement du
trigger pour chaque enregistrement ou pour l’ensemble des lignes modifiées.
Les triggers
À l’intérieur du code du trigger, vous pouvez contrôler avec précision les conditions
d’exécution :
IF INSERTING THEN
IF UPDATING ('SAL') THEN IF DELETING THEN
permettent d’effectuer des traitements différents suivant l’action qui a déclenché le trigger.
Les triggers
On peut même, dans le cas de la mise à jour d’un enregistrement, n’effectuer un traitement que si une colonne spécifique a été modifiée : IF UPDATING (liste de colonnes à modifier) THEN
Les triggers
Un trigger traitant des enregistrements en cours de modification, il est possible d’accéder à la valeur des données avant et après modification. Pour chaque colonne de la table, on a :
:old.nom_de_la_colonne :new.nom_de_la_colonne
Les triggers
Les valeurs new et old apparaissent en fonction du type d’action. Dans le cas d’une
INSERT : seule la valeur new existe, la valeur old n’ayant pas de sens pour un enregistrement en cours de création.
UPDATE : les valeurs new et old co-existent, DELETE : on ne retrouvera que la valeur old.