Les triggers en oracle
Les triggers en Oracle
1. Introduction
À la suite du laboratoire concernant les triggers sous Oracle, voici quelques précisions pour bien comprendre et préparer votre examen en base de données. Les informations ci-dessous se basent sur la documentation officielle d’Oracle disponible sur le site http://www.oracle.com/pls/db102/homepage. Lors de la correction du laboratoire, les informations décrites ci-dessous ont été prises en compte.
2. Les types de triggers
Il existe deux types de triggers différents : les triggers de table (STATEMENT) et les triggers de ligne (ROW). Quelle est la différence ? • Les triggers de table sont exécutés une seule fois lorsque des modifications surviennent sur une table (même si ces modifications concernent plusieurs lignes de la table). Ils sont utiles si des opérations de groupe doivent être réalisées (comme le calcul d’une moyenne, d’une somme totale, d’un compteur, …). Pour des raisons de performance, il est préférable d’employer ces triggers plutôt que les triggers lignes. • Les triggers lignes sont exécutés « séparément » pour chaque ligne modifiée dans la table. Ils sont très utiles s’il faut mesurer une évolution pour certaines valeurs, effectuer des opérations pour chaque ligne en question.
Lors de la création de triggers lignes, il est possible d’avoir accès à la valeur ancienne et la valeur nouvelle grâce aux mots clés OLD et NEW. Il n’est pas possible d’avoir accès à ces valeurs dans les triggers de table. Exemple de trigger table : CREATE TRIGGER log AFTER INSERT OR UPDATE ON Emp_tab BEGIN INSERT INTO log(table, date, username, action) VALUES ('Emp_tab', sysdate, sys_context('USERENV', 'CURRENT_USER'), 'INSERT/UPDATE on Emp_tab') ; END ; Ce trigger table enregistre dans une table log la trace de la modification de la table Emp_tab. On mémorise ici le moment de la modification et l’utilisateur qui l’a provoqué. Il n’est donc exécuté qu’une seule fois par modification de la table