Vous êtes sur la page 1sur 24

Cours: Systèmes de Gestion de Bases de Données :

Procedural Language /
Structured Query
Language
(PL/SQL)

Présenté par: Mme Olfa DRIDI


olfa.dridi@gmail.com

1 © Olfa DRIDI
Les procédures et les fonctions stockées

2 © Olfa DRIDI
PL/SQL

Procédures stockées
• Les procédures sont utilisées pour effectuer une action
spécifique.
• Elles échangent les valeurs par l'intermédiaire d'une liste
d'arguments.
• Elle peut être stockée dans la BD comme un objet.

3 ©
PL/SQL

Syntaxe

4 ©
PL/SQL

5 ©
PL/SQL

Exemple

6 ©
PL/SQL

Exemple

7 ©
PL/SQL

Suppression des procédures

8 ©
PL/SQL

Fonctions stockées
• Les fonctions sont utilisées pour retourner une valeur
• Les fonctions sont appelées comme une partie d’expression

9 ©
PL/SQL

Syntaxe

10 ©
PL/SQL

Exemple

11 ©
Les déclencheurs

12 © Olfa DRIDI
PL/SQL

Les déclencheurs
• Les déclencheurs de BD sont des objets de code PL/SQL
stockés dans la base de données et qui s'exécutent
automatiquement lorsqu'un événement se produit
• Les événements déclencheurs peuvent être:
• Des insertions dans une table
• la connexion d'un utilisateur à la base de données
• Ou encore la tentative de supprimer une table ou de modifier les
paramètres d'audit
• Les triggers de BD sont associés à une et une seule table
• Il est opérationnel jusqu’à la suppression de table à laquelle il
est lié

13 ©
PL/SQL

Les déclencheurs
• Les déclencheurs peuvent appeler d'autres procédures ou
fonctions
• Le déclencheur peut être conçu pour s'exécuter une fois pour
l'instruction, ou avec chaque ligne modifiée
• Le traitement associé au trigger peut être exécuté
• soit une fois, suite à l’événement qui l’a déclenché -trigger par
ordre
• soit pour chaque ligne de la table concernée par l’événement -
trigger ligne

14 ©
PL/SQL

Les déclencheurs
Deux types: DML triggers et System triggers
• DML triggers
• Permet d’enregistrer les valeurs de toutes les modifications
apportées à la BD
• System triggers
• auditing de toute action de création, de suppression ou de
connexion à la base

15 ©
PL/SQL

Syntaxe
CREATE [OR REPLACE] TRIGGER nom_trigger
instant liste_evts
ON nom_table ou nom_vue
[REFERENCING OLD AS old | NEW AS new]
[FOR EACH ROW]
[WHEN ( condition ) ]
Corps du trigger

instant ::= AFTER | BEFORE pour les tables


liste_evts ::= evt {OR evt}
evt ::= DELETE | INSERT |
UPDATE [OF { liste_cols }]
liste_col ::= nom_col { , nom_col }
Corps du programme PL/SQL

©
PL/SQL

Syntaxe

On définit :
la table à laquelle le trigger est lié,
les instructions du LMD qui déclenchent le trigger
le moment où le trigger va se déclencher par rapport à
l'instruction LMD (avant ou après)
si le trigger se déclenche une seule fois pour toute
l'instruction (i.e. trigger instruction), ou une fois pour
chaque ligne modifiée/insérée/supprimée. (i.e. trigger
ligne, avec l'option FOR EACH ROW)
et éventuellement une condition supplémentaire de
déclenchement (clause WHEN)

©
PL/SQL

AFTER ou BEFORE

Un trigger instruction se déclenche une fois, suite à une


instruction LMD.
Un trigger ligne (FOR EACH ROW) se déclenche pour
chaque ligne modifiée par l'instruction LMD.
18 ©
PL/SQL

Ligne d’un trigger


Dans un trigger ligne, on peut faire référence à la ligne
courante, celle pour laquelle le trigger s'exécute.
Pour cette ligne, on a accès à la valeur avant l'instruction LMD
(nommée :old) et à la valeur après l'instruction (nommée
:new).
:old :new
INSERT null ligne insérée
DELETE ligne supprimée null
UPDATE ligne avant modif ligne après modif

On peut définir une condition pour un trigger ligne : le


trigger se déclenchera pour chaque ligne vérifiant la
condition: clause WHEN.

©
PL/SQL

Exemple

CREATE OR REPLACE TRIGGER journal_emp


AFTER UPDATE OF salaire ON Employe
FOR EACH ROW
WHEN (new.salaire < old.salaire) /* attention, ici on
utilise new et pas :new */
BEGIN
INSERT INTO EMP_LOG(NumEmp, date_evt, msg)
VALUES (:new.NumEmp, sysdate, 'salaire diminué');
END ;

©
PL/SQL

Exemple

CREATE OR REPLACE TRIGGER ctrlmiseajour


BEFORE INSERT OR DELETE OR UPDATE ON EMPLOYES DECLARE MESSAGE
EXCEPTION;
BEGIN
IF (TO_CHAR(SYSDATE,'DY')= 'SAM.’ OR
TO_CHAR(SYSDATE,'DY’)='DIM.') THEN RAISE MESSAGE;
END IF;
EXCEPTION
WHEN MESSAGE THEN DBMS_OUTPUT.PUT_LINE(’on ne met pas à
jour à la fin de la semaine’);
END;

21 ©
PL/SQL

Exemple 3

22 ©
© Olfa DRIDI, FSB, 2020

Les prédicats INSERTING, UPDATING, DELETING

• Lorsqu’un trigger porte sur les opérations DML, nous


pouvons ajouter des prédicats dans notre code, pour
indiquer les opérations de déclenchement :

CREATE TRIGGER ...


BEFORE INSERT OR UPDATE ON employe
.......
BEGIN
......
IF INSERTING THEN ....... END IF;
IF UPDATING THEN ........ END IF;
......
END;

©
Questions ????????

© Olfa DRIDI

Vous aimerez peut-être aussi