Vous êtes sur la page 1sur 14

85

Objectifs du cours
1. Description du mécanisme de fonctionnement

2. Création

3. Exécution

4. Utilisation des déclencheurs dans le contexte d’audit sur les données et

utilisateurs.

5. Utilisation des déclencheurs dans un contexte de vérification et

validation des données.


86

Définition des triggers.


▪ Les triggers sont des procédures stockées qui s’exécutent

automatiquement quant un événement se produit.

▪ En général cet événement représente une opération LMD sur une

table. Les instructions: INSERT, UPDATE ou DELETE

▪ Les triggers sont des objets de la base ORACLE. le nom du

trigger doit être unique dans la base de données.


87

Création d’un trigger


CREATE [OR REPLACE] TRIGGER <nomtrigger>
BEFORE | AFTER | INSTEAD OF
INSERT OR UPDATE OR DELETE
ON <nom_de_table>
[FOR EACH ROW]
DECLARE
<Déclarations>
BEGIN
<instructions>
END;
/
88

Création d’un trigger. Explications

▪ L’événement déclenchant :
INSERT – DELETE – UPDATE – UPDATE [ OF nom_colonne, …]

▪ Type de triggers :
Ligne FOR EACH ROW ou table (appliqué 1SEULe fois au niveau
table)
▪ Séquencement :
BEFORE – AFTER – INSTEAD OF (Vue seulement)
▪ ON : Table – Vue
89

Type de triggers.
Oracle propose deux types de triggers :

▪ Les triggers de lignes (ROW) qui se déclenchent

individuellement pour chaque ligne de la table affectée par le

trigger. L’option FOR EACH ROW est alors spécifiée.

▪ Les triggers de tables (STATEMENT) qui sont déclenchées

une seule fois, L’option FOR EACH ROW n’est pas spécifiée
90

Exemples de triggers de table. (1/2)

Exemple 1:

Create or replace trigger trig_test_insertion


before insert on dept
Begin
dbms_output.put_line(‘insertion’);
End;
/
91

Exemples de triggers de table. (2/2)

Exemple 2:

Create or replace trigger trig_test_insertion


before insert or update or delete on dept
Begin
If inserting then dbms_output.put_line(‘insertion’);
Elsif deleting then dbms_output.put_line(‘suppression’);
Elsif updating then dbms_output.put_line(‘mise a jour’);
End if;
End;
/
92

Triggers de lignes.
Lors de la création de triggers lignes, il est possible d’avoir accès à
la valeur ancienne et la valeur nouvelle grâce aux mots clés OLD
et NEW.
Il n’est pas possible d’avoir accès à ces valeurs dans les triggers de
table.
→ :OLD et :NEW sont des variables qui donnent accès aux
deux états des données en cours de modification.
93

Prédicats.
Dans un trigger ligne, on doit pouvoir accéder aux anciennes et
nouvelles valeurs de colonnes de la ligne.

Les noms permettent de désigner ces deux valeurs sont :


:New contient les nouvelles valeurs.
:OLD contient les anciennes valeurs
94

Exemples de triggers de lignes. (1/2)

Exemple 1:

Create table etudiant1 ( nom varchar2(20) primary key, note number, classe

varchar2(10));

Create or replace trigger trig_ligne_note

Before insert on etudiant1

For each row

Begin

:new.note:=:new.note+1;

End;

/
95

Exemples de triggers de lignes. (2/2)

Exemple 2:

Create table statistique (classeEtudiant varchar2(10), nbrEtudiant

number);

Ecrire un trigger permettant de mettre a jour après chaque insertion

d’un étudiant le nombre d’étudiants de sa classe dans la table statistique.


96

Activer/désactiver/supprimer un trigger.
▪ Désactiver un trigger:

ALTER TRIGGER <nomtrigger> DISABLE;

▪ Activer un trigger:

ALTER TRIGGER <nomtrigger> ENABLE;

▪ Supprimer un trigger:

DROP TRIGGER <nomtrigger>;


Exercices.
Exercice 1
CREATE TABLE emp_salary_history (employee_id number(5),
last_name varcHAR2(32), salary number(7,2) );
- Écrire un trigger permettant d’éffectuer une insertion du salaire ancien
d’un employé dans la table emp_salary_history avant d’éffectuer une
modification sur ce salaire.
- Mettre à jour le salaire à 3000 pour l’employé 100
ExerCICE2
- Ecrire un trigger qui permet de vérifier pour chaque nouvelle insertion
dans la table employees si l’employee_id <1000 alors il génère une
exception "Numéro employé inférieur à 10000"

Vous aimerez peut-être aussi