Les déclencheurs (TRIGGER)

Actions réalisées lorsqu'un événement LMD (INSERT, UPDATE, DELETE) survient sur une table :

  • avant la réalisation de l'événement (BEFORE),
  • après la réalisation de l'événement (AFTER),
  • à la place de l'exécution d'une vue (INSTEAD OF).

Actions exécutées : requêtes, procédures, fonctions.

Deux types de déclencheurs :

  • par ORDRE : activés qu'une seule fois,
  • par lignes : activés pour chaque ligne impliquée dans l'événement.

Les déclencheurs par lignes sont plus souvent utilisés que les déclencheurs par ordre.

Séquencement des déclenchements :

  1. BEFORE ordre
  2. BEFORE lignes
  3. AFTER lignes
  4. AFTER ordre

Un TRIGGER ne peut agir sur la table sur laquelle il est défini (table dite en MUTATING) ou sur une table impliquée dans un ON DELETE CASCADE. Pour cette raison on évitera d'appeler des procédures et fonctions (même si c'est techniquement possible) dans le corps des déclencheurs car on ne sait pas si elles n'agissent pas sur la table en mutation.

Important : cette restriction est vraie pour Oracle mais PAS pour SQL Server.

Un TRIGGER ne peut pas gérer une transaction (COMMIT, ROLLBACK, SAVEPOINT) ou alors il faut utiliser PRAGMA AUTONOMOUS_TRANSACTION ce qui définira une transaction autonome.

Activer ou désactiver un TRIGGER

ALTER TRIGGER nom_trigger ENABLE | DISABLE;

Activer ou désactiver tous les TRIGGER d'une table

ALTER TABLE nom_table ENABLE | DISABLE ALL TRIGGERS;

Recompiler une TRIGGER

ALTER TRIGGER nom_trigger COMPILE;

Suppression d'un TRIGGER

DROP TRIGGER nom_trigger;