Trigger [déclencheurs]
Description:
Un trigger est un objet qui contient du code PL/SQL
et qui est exécuté lors d'un évènement. On dit qu'il se déclenche.
Il peut être exécuter avant (BEFORE), à la place (INSTEAD OF) ou
après (AFTER) une instruction SQL [INSERT|DELETE|UPDATE].
Fréquence:
Il est maintenant possible davoir plusieurs déclencheur par type daction.
Mais sil doit y avoir un ordre dans la séquence dexécution des déclencheurs,
il vaut mieux les regrouper par type (12 possibilités)
Cas fréquent:
Normalement, le déclencheur devrait sexécuter
- avant la destruction (BEFORE DELETE) ou
- après linsertion (AFTER INSERT)
On peut sen servir pour garder une trace des transactions ou pour composer un numéro séquentiel
Exemple:
un trigger peut se déclencher avant la suppresion
d'un enregistrement dans une table pour faire de l'archivage de données.
Syntaxe:
CREATE TRIGGER nomTrigger {BEFORE|INSTEAD OF|AFTER] {INSERT OR UPDATE OR DELETE} nomTable FOR EACH ROW [déclaration] [code PL-SQL : BEGIN... END;] /
[INSTEAD OF] pour les tables virtuelles (VIEW) uniquement [REFERENCING OLD] <Ancienne_valeur> NEW <nouvelle_valeur> sapplique surtout pour une action UPDATE [FOR EACH ROW] pour chaque rangée de la table (répétition) qui répond à la requête originale [WHEN] (FOR EACH ROW) la condition ne peut être une requête [FOR EACH STATMENT] 1 seule fois
Fin du code:
la fin du code d'un trigger se définit par un slash "/" à la dernière ligne.
Objets: :NEW et :OLD
Un trigger vient avec deux objets. L'objet :NEW est une copie du nouvel enregistrement
(dans un update par exemple) et l'objet :OLD est une copie de l'ancien enregistrement
(dans un delete par exemple).
Les propriétés de ces deux objets sont les champs de l'enregistrement.
Exemple: :NEW.age est la valeur du champ "age" du nouvel enregistrement d'une table.
Par définition :
NEW est NULL dans un DELETE et
OLD est NULL dans un INSERT