Triggers PDF
Triggers PDF
Triggers PDF
Abir GORRAB
abir.gorrab@sesame.com.tn
Introduction
Un trigger est un programme qui se déclenche
automatiquement suite à un évènement
En base de données, l’évènement est une instruction du LMD qui
modifie la base (INSERT, DELETE, UPDATE)
Ces triggers font partie du schéma de la base. Leur code compilé est
conservé.
Les triggers peuvent servir à vérifier des contraintes que l’on
ne peut pas définir de façon déclarative
[ WHEN ( <condition> ) ]
<corps>
PL/SQL 3
Entête du trigger
On définit
La table
Les instructions qui déclenchent le trigger
Le moment où le trigger va se déclencher par rapport à
l’instruction (avant ou après)
Si le trigger se déclenche
une seule fois pour toute l’instruction
ou une fois pour chaque lignemodifiée/insérée/supprimée
Et éventuellement une condition supplémentaire de
déclenchement (clause WHEN) pour les triggersligne.
PL/SQL 4
Conditions d’un trigger
Le trigger se déclenche lorsqu’un événement précis
survient :BEFORE UPDATE,AFTER DELETE,
AFTER INSERT,…
PL/SQL 5
Conditions d’un trigger
Si le trigger doit déterminer si l’instruction est autorisée : utiliser
BEFORE
Si le trigger doit ”fabriquer” la valeur d’une colonne pour pouvoir
ensuite la mettre dans la table :utiliser BEFORE.
Par exemple :trigger ligne qui fabrique la valeur de clé
primaire à partir d’uneséquence.
Si on a besoin que l’instruction soit terminée pour
exécuter le corps du trigger :utiliser AFTER
PL/SQL 6
Trigger table
<corps>
PL/SQL 7
Les types de triggers
Les triggers de table sont exécutés une seule fois lorsque des
modifications surviennent sur une table (même si ces
modifications concernent plusieurs lignes de latable).
PL/SQL 8
Trigger table
Exemple
CREATE TRIGGER log
AFTER INSERT OR UPDATE ON Emp_tab
BEGIN
INSERT INTO log(table, date, action) VALUES ('Emp_tab',
sysdate, 'INSERT/UPDATE on Emp_tab') ;
END ;
PL/SQL 9
Trigger ligne
ON <nom_table>
[ WHEN ( <condition> ) ]
<corps>
PL/SQL 10
Trigger ligne
Les triggers lignes sont exécutés « séparément » pour chaque
ligne modifiée dans la table.
Ils sont très utiles s’il faut mesurer une évolution pour certaines
valeurs, effectuer des opérations pour chaque ligne en question.
Il n’est pas possible d’avoir accès à ces valeurs dans les triggers
de table.
PL/SQL 11
Trigger ligne
PL/SQL 12
Trigger ligne
CREATE TRIGGER Print_salary_changes
BEFORE UPDATE
ON Emp_tab
FOR EACH ROW
WHEN (new.Empno > 0)
DECLARE sal_diff number;
BEGIN
sal_diff := :new.sal - :old.sal;
dbms_output.put_line(' Old : ' || :old.sal || 'New : ' || :new.sal || 'Difference : ' ||
sal_diff);
END ;
PL/SQL 13
Les types de trigger
Trigger de table :
Le trigger est exécuté une fois pour l’ensemble de l’instruction
pas de notion de ligne courante.
Trigger ligne :
notion de ligne courante, :old désigne la ligne avant
modification et :new désigne la ligne après modification.
:old :new
Insert null Valeur insérée
Delete Valeur supprimée Null
Update Valeur avant modification Valeur après modification
PL/SQL 14
Ordre d’exécution des triggers
PL/SQL 15
Activation / Désactivation des triggers
Lorsqu’un trigger est créé, il est automatiquement activé
Désactiver un trigger :
ALTERTRIGGER trigger_name DISABLE
Activer un trigger :
ALTERTRIGGER trigger_name ENABLE
Activer ou désactiver tous les triggers d’une table :
ALTER TABLE table_name DISABLE |[ENABLE]ALL
TRIGGERS
PL/SQL 16
Remarques
Recompiler un trigger:
ALTER TRIGGER trigger_nameCOMPILE
le trigger est recompilé sans perdre sa validité (actif) ou son
invalidité(non actif).
Afficher les erreurs de compilation :
SHOW ERRORS
Supprimer un trigger :
DROP TRIGGER nomTrigger
PL/SQL 17
Remarques
Nom des triggers et leurs propriétaires
SELECT owner, object_name
FROM all_objects
WHERE object_type = ‘TRIGGER'
ORDER BY owner, object_name;
PL/SQL 18