Académique Documents
Professionnel Documents
Culture Documents
BD : Le langage PL/SQL
2 SAGAR Samya
Définition
Programme PL/SQL mémorisé, associé à une table (schéma ou base de
données) et déclenché automatiquement par des évènements liés à des
actions sur cette table
Déclencheur (trigger) = programme dont l’exécution est déclenchée (fired)
par un événement
Un déclencheur n’est pas appelé explicitement par une application
Événements déclencheurs :
Instruction LMD : INSERT, UPDATE, DELETE
Instruction LDD : CREATE, ALTER, DROP
Démarrage ou arrêt de la base
Connexion ou déconnexion d’utilisateur
Erreur d’exécution
Usage fréquent : implémenter les règles de gestion non exprimables par les
contraintes au niveau des tables
Les triggers complètent les contraintes d'intégrité en permettant l'application de
règles plus complexes
3 SAGAR Samya
Création d’un déclencheur
Structure :
1. Description de l’événement déclencheur
2. Éventuelle condition supplémentaire à satisfaire pour déclenchement
3. Description du traitement à réaliser après déclenchement
Syntaxe pour déclenchement sur instruction LMD :
4 SAGAR Samya
Création d’un déclencheur : Exemple
5 SAGAR Samya
Déclencheurs sur instruction LMD
Quand le déclenchement a lieu (si concevable) :
Avant l’événement : BEFORE
Après l’événement : AFTER
À la place de l’événement : INSTEAD OF (uniquement
pour vues multi-tables)
Description de l’événement (pour instructions LMD) :
La ou les (OR) instructions,
Si l’événement concerne des colonnes spécifiques ([OF
colonne 1, …]) ou non,
Le nom de la table (ou vue) (ON {nomTable | nomVue})
6 SAGAR Samya
Déclencheurs sur instruction LMD
Changement des noms par défaut : REFERENCING
:OLD désigne un enregistrement à effacer (déclencheur sur DELETE,
UPDATE) : REFERENCING OLD AS nomAncien
Variable spécifique: :OLD.nom_attribut Valeur d'un attribut avant mise à jour
Exemple : DELETE FROM client WHERE numclient=1;
:OLD.numclient a la valeur 1
8 SAGAR Samya
Base exemple
Tables de la base (la clé primaire est soulignée) :
immeuble (Adr, NbEtg, DateConstr, NomGerant)
appart (Adr, Num, Type, Superficie, Etg, NbOccup)
personne (Nom, Age, CodeProf)
occupant (Adr, NumApp, NomOccup, DateArrivee, DateDepart)
propriete (Adr, NomProprietaire, QuotePart)
11 SAGAR Samya
Déclencheur sur INSERT (2)
Si chaque nouvel immeuble doit avoir au moins un
appartement, insérer un appartement après la création de
l’immeuble (FOR EACH ROW est nécessaire pour avoir accès à
:NEW, l’enregistrement ajouté) :
12 SAGAR Samya
Déclencheur sur DELETE
Au départ d’un occupant, décrémente appart.NbOccup après
effacement de l’occupant (FOR EACH ROW est nécessaire car la
suppression peut concerner plusieurs occupants, ainsi que
pour avoir accès à :OLD, l’enregistrement éliminé) :
13 SAGAR Samya
Déclencheur sur UPDATE
En cas de modification d’un occupant, met à jour les valeurs de
appart.NbOccup pour 2 les appartements éventuellement
concernés (utilise à la fois :OLD et :NEW) :
14 SAGAR Samya
Déclencheur de MAJ avec restriction
Exemple
CREATE TRIGGER scott.salary_check
BEFORE
INSERT OR UPDATE OF sal, job ON scott.emp
FOR EACH ROW
WHEN (:new.job <> 'PRESIDENT')
-- bloc PL/SQL
16 SAGAR Samya
Déclencheur sur LDD : exemple
Enregistrement des changements de noms des objets du
dictionnaire :
historiqueChangementNoms(Date,NomObjet,NomProprietaire)
17 SAGAR Samya
Déclencheurs d’instance
Syntaxe :
CREATE [OR REPLACE] TRIGGER nomDeclencheur
BEFORE | AFTER evenement [OR evenement …]
ON {[nomSchema.]SCHEMA | DATABASE}
{[DECLARE …] BEGIN … [EXCEPTION …] END;
| CALL nomSousProgramme(listeParametres)}
18 SAGAR Samya
Déclencheur d’instance : exemple
Afficher l’identité de l’objet ayant provoqué un débordement :
19 SAGAR Samya
Manipulation d’un déclencheur
Tout déclencheur est actif dès sa compilation !
Re-compilation d’un déclencheur après modification :
ALTER TRIGGER nomDeclencheur COMPILE;
Désactivation de déclencheurs :
ALTER TRIGGER nomDeclencheur DISABLE;
ALTER TABLE nomTable DISABLE ALL TRIGGERS;
Réactivation de déclencheurs :
ALTER TRIGGER nomDeclencheur ENABLE;
ALTER TABLE nomTable ENABLE ALL TRIGGERS;
Suppression d’un déclencheur :
DROP TRIGGER nomDeclencheur;
20 SAGAR Samya
Appel de procédure dans un déclencheur
Exemple
21 SAGAR Samya
Droits de création et manipulation
Déclencheurs d’instance : privilège
ADMINISTER DATABASE TRIGGER
Autres déclencheurs :
Dans tout schéma : privilège CREATE ANY TRIGGER
Dans votre schéma : privilège CREATE TRIGGER
(rôle RESOURCE)
22 SAGAR Samya