Trigger [dclencheurs]

Description:
Un trigger est un objet qui contient du code PL/SQL et qui est excut lors d'un vnement. On dit qu'il se dclenche.
Il peut tre excuter avant (BEFORE), la place (INSTEAD OF) ou aprs (AFTER) une instruction SQL [INSERT|DELETE|UPDATE].

Frquence:
Il est maintenant possible davoir plusieurs dclencheur par type daction.
Mais sil doit y avoir un ordre dans la squence dexcution des dclencheurs, il vaut mieux les regrouper par type (12 possibilits)

Cas frquent:
Normalement, le dclencheur devrait sexcuter
- avant la destruction (BEFORE DELETE) ou
- aprs linsertion (AFTER INSERT)
On peut sen servir pour garder une trace des transactions ou pour composer un numro squentiel

Exemple:
un trigger peut se dclencher avant la suppresion d'un enregistrement dans une table pour faire de l'archivage de donnes.

Syntaxe:

CREATE TRIGGER nomTrigger
 {BEFORE|INSTEAD OF|AFTER] {INSERT OR UPDATE OR DELETE} nomTable
  FOR EACH ROW
  [dclaration]
  [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 range de la table (rptition) qui rpond  la requte originale
 [WHEN]            (FOR EACH ROW) la condition ne peut tre une requte
 [FOR EACH STATMENT] 1 seule fois
    

Fin du code:
la fin du code d'un trigger se dfinit par un slash "/" la dernire 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 proprits 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 dfinition :
NEW est NULL dans un DELETE et
OLD est NULL dans un INSERT