Les déclencheurs (triggers) existent depuis la version 6 d’Oracle.
Les triggers permettent d’exécuter automatiquement des procédures centralisées dans la base de données.
Les triggers se déclenchent sur des actions modifiant les données de la table sur laquelle porte le trigger.
Les triggers se déclenchent lorsqu’un événement précis survient : BEFORE UPDATE, AFTER DELETE,
AFTER INSERT, etc. Ils définissent le moment d’exécution du trigger.
• les triggers table (STATEMENT)
• les triggers ligne (ROW).
• Les triggers table sont exécutés une seule fois lorsque des modifications surviennent sur une ou plusieurs lignes de la table. Souvent utilisés pour des opérations de
groupe.
- il n’est pas possible d’avoir accès à la valeur ancienne et la valeur nouvelle (OLD et
NEW).
CREATE TRIGGER log_in_table
AFTER INSERT OR UPDATE
ON scott.emp
BEGIN
INSERT INTO log_table (table_name, date, username, evenement)
VALUES ('scott.emp', sysdate, sys_context('USERENV','CURRENT_USER'), 'Insert/Update scott.emp');
END ;
|
Ce trigger table enregistre dans une table log_table une trace de la modification de la table Emp. Ce trigger est exécuté qu’une seule fois par modification de la table Emp.
• Les triggers lignes sont exécutés séparément pour chaque ligne modifiée dans la table.
- il est possible d’avoir accès à la valeur ancienne et la valeur nouvelle grâce aux mots clés OLD et NEW.
CREATE OR REPLACE TRIGGER log_mute_table AFTER UPDATE OF deptno ON scott.emp FOR EACH ROW WHEN (OLD.deptno < 96 AND NEW.deptno > 95 ) BEGIN INSERT INTO log_mutable (deptno_old, deptno_new, date,sal_name, evenement) VALUES (OLD.deptno, NEW.deptno, sysdate, NEW.ename, ‘Mutation Etranger') ; END ; |
Ce trigger ligne est déclenché lorsque le champ deptno de la table Emp est mise à jour, seulement si l’ancienne valeur de deptno est inferieur 96 et si la nouvelle valeur est
supérieur à 95.
Pour chaque déclenchement le trigger va insérer dans la table log_mutable l’ancienne valeur et nouvelle valeur de deptno.
La condition WHEN restreint le déclenchement du trigger (exécuté uniquement si OLD.deptno < 96 AND NEW.deptno > 95).
Il n’est pas permis de consulter ou modifier une table mutante. (Sinon que par OLD et NEW).
Cette restriction préserve le TRIGGER LIGNE de lire des données inconsistantes sur laquelle il porte.
| Liens en rapport avec l'article et qui sont susceptibles de vous intéresser |
| • Activer Désactiver Supprimer Trigger Oracle |