Académique Documents
Professionnel Documents
Culture Documents
Avancées: PL/SQL
2
2
Chapitre 4 : Packages et Déclencheurs
(triggers).
1. Définition
4
4
I . PACKAGES
• Spécification :
• Elle définit les éléments du package accessibles à l'extérieur.
• Inclut les déclarations de procédures, fonctions, types de
données personnalisés, constantes, etc.
• Corps :
• Contient l'implémentation réelle des éléments définis dans la
spécification.
• Il contient le code pour chaque procédure ou fonction
déclarée dans la spécification.
• Peut inclure des éléments supplémentaires privés qui ne sont
pas accessibles à l'extérieur du package.
5
5
I . PACKAGES
-- Spécification du package
CREATE [OR REPLACE] PACKAGE nom_package IS
-- Déclarations (variables, constantes, procédures, fonctions, types)
END;
-- Corps du package
CREATE PACKAGE BODY nom_package IS
-- Implémentation des procédures et fonctions déclarées dans la spécification
END;
6
6
I . PACKAGES
Exemple :
Le package GestionEmployes comprend la définition d’une constante salaire_min,
une procédure embaucher_emp pour l'insertion d'un employé dans une table, et
une fonction calculer_prime qui calcule une prime en fonction du salaire de
l'employé.
• Spécification du package :
-- Spécification du package
CREATE OR REPLACE PACKAGE GestionEmployes AS
-- Déclaration d'une constante
salaire_min CONSTANT NUMBER := 30000;
-- Déclaration d'une procédure
PROCEDURE embaucher_emp(id NUMBER, nom VARCHAR2, salaire NUMBER);
-- Déclaration d'une fonction
FUNCTION calculer_prime(salaire IN NUMBER) RETURN NUMBER;
END GestionEmployes;
7
7
I . PROCEDURE
• Corps du package :
-- Corps du package
CREATE OR REPLACE PACKAGE BODY GestionEmployes AS
-- Implémentation de la procédure d'embauche
PROCEDURE embaucher_emp(id NUMBER, nom VARCHAR2, salaire NUMBER) IS
BEGIN
INSERT INTO Employes (employe_id, employe_nom, employe_salaire)
VALUES (id, nom, salaire);
COMMIT; -- Validation de la transaction
END embaucher_employe;
Structures Privées :
Les structures privées sont celles déclarées uniquement dans le
corps du package et ne sont pas accessibles à l'extérieur du
package. Elles ne sont visibles que dans le corps du package lui-
même et ne peuvent pas être utilisées en dehors de celui-ci.
9
9
I . PACKAGES
4. Exemple : Structures publiques et privées
CREATE OR REPLACE PACKAGE GestionVentes AS
-- Structure publique : déclaration d'une fonction
FUNCTION calcul_tva(prix_total NUMBER) RETURN NUMBER;
END GestionVentes;
DECLARE
montant_total NUMBER := 1500;
montant_tva NUMBER;
BEGIN
montant_tva := GestionVentes.calcul_tva(montant_total);
DBMS_OUTPUT.PUT_LINE('Montant de TVA pour ' || montant_total || ' :
' || montant_tva);
END;
11
11
I . PACKAGES
6. Suppression d’une package
12
12
I . PACKAGES
7. Exemple d’application
Créer un package pour gérer des opérations bancaires, en permettant
d'ajouter des comptes, de consulter le solde d'un compte et
d'effectuer des transactions.
Spécification du package :
• Déclarer une constante représentant le solde initial pour un
nouveau compte.
• Définir une procédure pour créer un nouveau compte.
• Déclarer une fonction pour consulter le solde d'un compte.
• Définir une procédure pour effectuer un dépôt sur un compte.
• Définir une procédure pour effectuer un retrait d'un compte.
13
13
I . PACKAGES
7. Exemple d’application
Spécification du package :
14
14
I . PACKAGES
7. Exemple d’application
15
15
I . PACKAGES
7. Exemple d’application
16
16
I . PACKAGES
7. Exemple d’application
Exemple d’appels du package GestionComptes :
1. Créer un nouveau compte :
BEGIN
GestionComptes.creer_compte(123456);
COMMIT;
END;
17
17
I . PACKAGES
6. Exemple d’application
Exemple d’appels du package GestionComptes :
3. Effectuer un dépôt sur un compte :
BEGIN
GestionComptes.effectuer_depot(123456, 500);
COMMIT;
END;
BEGIN
GestionComptes.effectuer_retrait(123456, 200);
COMMIT;
END;
18
18
II . Triggers
1. Définition :
Les triggers sont utilisés pour automatiser des actions et appliquer des
règles métier spécifiques lors de la manipulation des données.
19
19
II . Triggers
A. Moment du déclenchement :
pour une table : BEFORE OU AFTER
pour une vue : INSTEAD OF
B. Événement déclencheur : INSERT, UPDATE ou DELETE
C. Nom de la table : sur table ou la vue
D. Type de déclencheur : ligne ou instruction
E. Clause WHEN : condition restrictive par ligne
F. Cors du déclencheur : bloc PL/SQL
20
20
II . Triggers
A. Moment du déclenchement :
• Triggers BEFORE (Avant) : Ces triggers sont déclenchés avant
l'exécution de l'événement sur la table. Par exemple, un trigger
BEFORE INSERT est déclenché juste avant qu'une nouvelle ligne
ne soit insérée dans une table.
21
21
II . Triggers
B. Événement déclencheur :
Il peut s'agir d'une opération effectuée sur une table, comme
une insertion de données, une mise à jour ou une suppression.
• INSERT
• UPDATE
• DELETE
22
22
II . Triggers
23
23
II . Triggers
E. Clause WHEN :
Cette clause est utilisée pour les déclencheurs de ligne afin de
déterminer quelles lignes déclenchent effectivement le trigger.
F. Corps du déclencheur
Il s'agit du bloc de code PL/SQL qui contient les instructions à
exécuter lorsque le trigger est déclenché.
24
24
II . Triggers
3. Séquence d’exécution:
❖ Manipulation d’une seule ligne
Instruction :
Action de déclenchement :
Déclencheur sur
instruction BEFORE
dep_id dep_name location_Id
10 Mathématiques 100
20 Marketing 200
30 Physique 300
… Déclencheur sur
ligne BEFORE
Déclencheur sur 40 Informatique 400
Déclencheur sur
instruction AFTER
ligne AFTER
25
25
II . Triggers
3. Séquence d’exécution:
❖ Manipulation des plusieurs ligne
Instruction :
UPDATE Employee
SET Sal = Sal * 1.1
WHERE dep_Id = 30
Action de déclenchement :
Déclencheur sur
instruction BEFORE
emp_id emp_name dep_Id
sur ligne BEFORE
1 HANAFI 30 sur ligne AFTER
5 KORNAFI 30
…
7 ZITONI 30
57 ADNAN 30
sur ligne BEFORE
Déclencheur sur 117 KHOCHAM 30 sur ligne AFTER
instruction AFTER
26
26
II . Triggers
27
27
II . Triggers
❖ Déclencheur sur instruction :
Exemple :
Supposons que vous ayez une table produits avec des quantités
vendues et une table rapport_ventes où vous souhaitez mettre à jour
le total des ventes chaque fois que plusieurs produits sont vendus.
UPDATE rapport_ventes
SET total_ventes = total_ventes;
END;
30
30
II . Triggers
END IF;
END;
Dans cet exemple, le déclencheur trig_maj_salaire est déclenché
avant toute mise à jour sur la table employes. Si la condition
:NEW.salaire > :OLD.salaire est vraie.
• Supprimer un déclencheur :