Principes des triggers

DéfinitionTrigger

Un trigger (ou déclencheur) est un bloc PL/SQL associé à une table permettant de déclencher une action avant ou après un INSERT, UPDATE ou DELETE sur cette table.

Les triggers sont stockés dans la base.

A quoi servent les triggers ?

  • Ils permettent de renforcer l'intégrité des données (mais on préférera des contraintes "check", "unique" ou "foreign key" quand c'est possible).

  • Ils permettent d'auditer des actions sur une table.

  • Ils permettent de calculer des valeurs dérivées pour d'autres colonnes de la table.

    Ils constituent ainsi une des solutions pour l'implémentation des attributs dérivés.

Types de triggers

Il existe deux types de triggers :

  • Trigger sur ligne

    le trigger est exécuté pour chaque ligne concernée par l'instruction insert, update ou delete (option "for each row").

  • Trigger sur instruction

    le trigger est exécuté une seule fois pour l'instruction insert, update ou delete, même si elle traite plusieurs lignes d'un coup.

SyntaxeTrigger

1
CREATE [OR REPLACE] TRIGGER nom_trigger {BEFORE|AFTER}
2
[INSERT OR][UPDATE [OF nom_colonne] OR][DELETE]
3
ON nom_Table
4
[FOR EACH ROW [WHEN (condition)] ]
5
DECLARE
6
 [variable declarations]
7
BEGIN
8
 instructions
9
END;

RemarqueAvant ou après ?

En général les triggers sont de type "before", en particulier pour les triggers sur ligne, c'est à dire qu'ils s'exécutent avant que l'action considérée soit exécutée, ce qui permet d'infléchir le résultat de cette action. Alors qu'un trigger "after" ne pourra plus modifier le tuple considéré et agira seulement sur d'autres tuples.

AttentionTriggers multiples

Une même table peut avoir plusieurs triggers, mais cela est à éviter en général, pour des raisons de facilité de maintenance et de performance.

AttentionException

Si l'exécution du trigger échoue, l'action (insert, update ou delete dans la table) est annulée (et retourne une exception Oracle).