Vous êtes sur la page 1sur 20

Les triggers

Oracle vous permet de définir des procédures,


appelées triggers, de la base de données.
Ces procédures sont associées à une table et
sont exécutées implicitement lorsque vous
lancez des ordres SQL de type insertion,
modification, suppression (INSERT, UPDATE,
DELETE).
Les triggers
Principes d’utilisation des triggers
Les triggers permettent d’exécuter automatiquement
des procédures centralisées dans la base de données,
quel que soit l’utilisateur ou l’application qui les
déclenche. Ils sont souvent utilisés pour construire des
interfaces interapplications et s’avèrent très simples
et très souples dans leur maniement.
Les triggers se déclenchent sur des actions modifiant
les données de la table sur laquelle porte le trigger. Si
cette table est accessible en lecture uniquement, aucun
trigger ne sera déclenché.
Les triggers

N’utilisez pas les triggers pour effectuer des


contrôles d’intégrité des données qui peuvent
être réalisés par des contraintes d’intégrité. Ces
contraintes positionnées au niveau des
tables sont puissantes et très optimisées.
Les triggers
Nous voulons constituer un fichier historique de
toutes les modifications apportées au salaire des
employés :
CREATE TABLE historique (
empno NUMBER(5),
ancien_sal NUMBER(7,2),
nouveau_sal NUMBER(7,2),
dat_modif DATE,
utilisateur VARCHAR2(30),
commentaireVARCHAR2(20) ) ;
CREATE OR REPLACE TRIGGER trig_salaire
AFTER INSERT OR UPDATE OR DELETE ON emp
FOR EACH ROW
DECLARE
dat_m DATE := SYSDATE ;
BEGIN
IF INSERTING THEN INSERT INTO historique VALUES
(:new.empno,null,:new.sal,date_m,user,'NOUVEAU' );
ELSIF UPDATING ('SAL') THEN INSERT INTO historique
VALUES(:old.empno,:old.sal,:new.sal,quand,user,'MODIFIE');
ELSIF DELETING THEN INSERT INTO historique
VALUES (:old.empno,:old.sal,null,quand,user,'SUPPRIME');
END IF;
END;/
Les triggers
CREATE OR REPLACE TRIGGER crée un trigger
DROP TRIGGER supprime un trigger

ALTER TRIGGER nom_du_trigger ENABLE ;


-- active le trigger
ALTER TRIGGER nom_du_trigger DISABLE;
-- désactive le trigger
Les triggers

Cette opération peut être étendue en un seul


ordre SQL à l’ensemble des triggers qui portent
sur une table :
ALTER TABLE table_ou_sont_des_triggers
DISABLE ALL TRIGGERS ;

ALTER TABLE table_ou_sont_des_triggers


ENABLE ALL TRIGGERS ;
Les triggers

Le type d’action qui déclenche le trigger détermine


son moment d’exécution ; il est précisé au début de
l’écriture du code du trigger. Les actions sont les
suivantes : INSERT ; UPDATE ; DELETE.

Le trigger peut être déclenché avant ou après cette


action : BEFORE ou AFTER.
Les triggers

Le trigger peut être déclenché avant ou après


cette action : BEFORE ou AFTER.
Les triggers
FOR EACH ROW
Pour un ordre SQL modifiant plusieurs enregistrements
simultanément, la clause
FOR EACH ROW détermine le déclenchement du
trigger pour chaque enregistrement ou pour l’ensemble
des lignes modifiées.
Les triggers
À l’intérieur du code du trigger, vous pouvez contrôler
avec précision les conditions
d’exécution :
IF INSERTING THEN
IF UPDATING ('SAL') THEN
IF DELETING THEN
permettent d’effectuer des traitements différents
suivant l’action qui a déclenché le trigger.

Les triggers

On peut même, dans le cas de la mise à jour


d’un enregistrement, n’effectuer un traitement
que si une colonne spécifique a été modifiée :

IF UPDATING (liste de colonnes à modifier)


THEN
Les triggers
Un trigger traitant des enregistrements en cours de
modification, il est possible d’accéder à la valeur des
données avant et après modification. Pour chaque
colonne de la table, on a :

:old.nom_de_la_colonne
:new.nom_de_la_colonne
Les triggers
Les valeurs new et old apparaissent en fonction du
type d’action. Dans le cas d’une
INSERT : seule la valeur new existe, la valeur old
n’ayant pas de sens pour un enregistrement en
cours de création.
UPDATE : les valeurs new et old co-existent,
DELETE : on ne retrouvera que la valeur old.
Les triggers
Les triggers
Les triggers
Les triggers
Les triggers
Les triggers

Vous aimerez peut-être aussi