Overblog Suivre ce blog
Editer l'article Administration Créer mon blog
21 mai 2011 6 21 /05 /mai /2011 11:06

Les Types de Triggers Table et Triggers Ligne Oracle

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.

Deux types de triggers différents :

• les triggers table (STATEMENT)
• les triggers ligne (ROW).

 

Les différences entre TRIGGER TABLLE et TRIGGER LIGNE.

• 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).

Exemple TRIGGER table

 
 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.

Exemple TRIGGER ligne

 
 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

Partager cet article

Repost 0
Published by Daniel Roesch - dans ORACLE TRIGGERS
commenter cet article

commentaires