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