PL SQL Global 2018 Vrai PDF
PL SQL Global 2018 Vrai PDF
PL SQL Global 2018 Vrai PDF
LES TRIGGERS
ORACLE PL/SQL
BASES DE DONNEES RELATIONNELLES
SOMMAIRE GENERAL
MOTIVATIONS
STRUCTURE D’UN BLOC PL/SQL
LES VARIABLES
LES ENREGISTREMENTS
ASSIGNATION DES VARIABLES ET AFFECTATION
STRUCTURES DE CONTRÔLE
LES COLLECTIONS
LES TRANSACTIONS
INSERT-UPDATE-DELETE DANS UN BLOC PL/SQL
GESTION DES ERREURS ET DES EXCEPTIONS
LES CURSEURS
LES PROCEDURES ET LES FOCNTIONS STOCKEES
LES PACKAGES
LES TRIGGERS
ORACLE PL/SQL
BASES DE DONNEES RELATIONNELLES
LES
TRIGGERS
(DECLENCHEURS)
ORACLE PL/SQL
BASES DE DONNEES RELATIONNELLES
Définition
Un déclencheur est un programme qui se déclenche automatiquement suite à un évènement
sur une table, une base, une application ou un évènement système
la sécurité
l'audit
l'intégrité des données
l'intégrité référentielle
la réplication de table
le calcul automatique des données dérivées
la consignation des événements
ORACLE PL/SQL
BASES DE DONNEES RELATIONNELLES
LES
TRIGGERS LMD
(DECLENCHEURS)
ORACLE PL/SQL
BASES DE DONNEES RELATIONNELLES
EVENEMENT Déclencheur
CHECK_SAL
E_EMPLOYEES
QUESTIONS
EVENEMENT DECLENCHEUR??
TEMPS DE L’EXECUTION? APRES L’EVENEMENT DECLENCHEUR? AVANT?
SUR TOUTE LA TABLE? SUR CHAQUE LIGNE???
ORACLE PL/SQL
BASES DE DONNEES RELATIONNELLES
LE TRIGGER SUR LA TABLE EST DECLENCHE UNE SEULE FOIS SUITE A UN EVENEMENT SUR
LA TABLE
ORACLE PL/SQL
BASES DE DONNEES RELATIONNELLES
ORACLE PL/SQL
BASES DE DONNEES RELATIONNELLES
ORACLE PL/SQL
BASES DE DONNEES RELATIONNELLES
ORACLE PL/SQL
BASES DE DONNEES RELATIONNELLES
EVENEMENT Déclencheur
CHECK_SAL
E_EMPLOYEES
Déclencheur créé.
SQL>
ORACLE PL/SQL
BASES DE DONNEES RELATIONNELLES
NO SALAIRE
---------- ----------
1 15189,2
2 4000,5
3 4500,5 SQL>
4 4300,98 SQL> --test
5 4350,5 SQL> UPDATE E_EMPLOYE SET SALAIRE=1000
6 3500,98 WHERE NO=1;
7 5400,5 UPDATE E_EMPLOYE SET SALAIRE=1000 WHERE
8 3000,5 NO=1
9 4000,5 *
10 6000,34 ERREUR à la ligne 1 :
ORA-20200: ERR: LE SALAIRE DOIT SUPERIEUR A
10 ligne(s) sélectionnée(s). L ANCIEN SALAIRE!!
ORA-06512: à "RACHID.CHECK_SAL", ligne 3
ORA-04088: erreur lors d'exécution du
déclencheur 'RACHID.CHECK_SAL'
ORACLE PL/SQL
BASES DE DONNEES RELATIONNELLES
TRIGGER SUR LIGNE: Exemple 2: TRACABILITE DES SUPPRESSIONS SUR UNE TABLE
10 ligne(s) sélectionnée(s).
ORACLE PL/SQL
BASES DE DONNEES RELATIONNELLES
TRIGGER SUR LIGNE: Exemple 2: TRACABILITE DES SUPPRESSIONS SUR UNE TABLE
SQL> CREATE SEQUENCE SEQ_TR_EMP START WITH 1;
Séquence créée.
SQL>
SQL> CREATE TABLE TRACE_EMPS(
2 NUMOP NUMBER(7),
3 DT_OP DATE,
4 OPERAT VARCHAR2(20),
5 NOEMP NUMBER(7),
6 NOMEMP VARCHAR2(50),
7 PREEMP VARCHAR2(25),
8 DTENTREMP DATE,
9 TITREEMP VARCHAR2(25),
10 SER_NOEMP NUMBER(7),
11 COMMENTAIRE VARCHAR2(200),
12 SALEMP NUMBER(11,2),
13 OLD_PCT_COMM NUMBER(4,2)
14 );
Table créée.
ORACLE PL/SQL
BASES DE DONNEES RELATIONNELLES
TRIGGER SUR LIGNE: Exemple 2: TRACABILITE DES SUPPRESSIONS SUR UNE TABLE
SQL>
SQL> CREATE OR REPLACE TRIGGER TRACE_EMPS
2 AFTER DELETE ON E_EMPLOYE
3 FOR EACH ROW
4 BEGIN
5 IF DELETING THEN
6 INSERT INTO TRACE_EMPS VALUES(
7 SEQ_TR_EMP.NEXTVAL,
8 SYSDATE,
9 USER,
10 :OLD.NO,
11 :OLD.NOM,
12 :OLD.PRENOM,
13 :OLD.DT_ENTREE,
14 :OLD.TITRE,
15 :OLD.SERVICE_NO,
16 :OLD.COMMENTAIRE,
17 :OLD.SALAIRE,
18 :OLD.PCT_COMMISSION
19 );
20 END IF;
21 END;
22 /
Déclencheur créé.
ORACLE PL/SQL
BASES DE DONNEES RELATIONNELLES
TRIGGER SUR LIGNE: Exemple 2: TRACABILITE DES SUPPRESSIONS SUR UNE TABLE
SQL> --test
SQL> DELETE E_EMPLOYE WHERE NO IN (7, 8, 9,10);
4 ligne(s) supprimée(s).
SQL> COMMIT; --si on commite pas, les tuples ajoutés dans TRACE_EMPS seront vidés
2
ORACLE PL/SQL
BASES DE DONNEES RELATIONNELLES
Déclencheur créé.
SQL>
ORACLE PL/SQL
BASES DE DONNEES RELATIONNELLES
1 ligne créée.
SQL> commit;
Validation effectuée.
SQL>
SQL> SELECT NO, NOM, PRENOM, SALAIRE, DT_ENTREE FROM E_EMPLOYE WHERE NO=555;
ORACLE PL/SQL
BASES DE DONNEES RELATIONNELLES
LES
TRIGGERS vs VIEW
ORACLE PL/SQL
BASES DE DONNEES RELATIONNELLES
LES VUES: DEFINITION
Table virtuelle calculée à partir d’autres tables ou vues par une requête
Pas d’existence physique mais recalculée chaque fois qu’elle est invoquée
Vue mono table
Vue multi-tables
Intérêts:
Indépendance application/données
Personnalisation des données selon les besoins des utilisateurs
Confidentialité
Rapidité des requêtes
Utilisation:
ORACLE PL/SQL
BASES DE DONNEES RELATIONNELLES
ORACLE PL/SQL
BASES DE DONNEES RELATIONNELLES
Exemples:
ORACLE PL/SQL
BASES DE DONNEES RELATIONNELLES
UPDATE
SELECT
DELETE
la vue contient
INSERT
Plusieurs tables OUI NON NON NON
GROUP BY OUI NON NON NON
DISTINCT OUI NON NON NON
fonction de groupe OUI NON NON NON
Attribut calculé OUI NON OUI NON
Attribut NOT NULL pas dans le OUI OUI OUI NON
SELECT
UNION, INTERSETC, MINUS OUI NON NON NON
ORACLE PL/SQL
BASES DE DONNEES RELATIONNELLES
ORACLE PL/SQL
BASES DE DONNEES RELATIONNELLES
-INSERTION
-SUPPRESSION
-MODIFICATION
ORACLE PL/SQL
BASES DE DONNEES RELATIONNELLES
ORACLE PL/SQL
BASES DE DONNEES RELATIONNELLES
Séquence créée.
ORACLE PL/SQL
BASES DE DONNEES RELATIONNELLES
ORACLE PL/SQL
BASES DE DONNEES RELATIONNELLES
SQL> --test
SQL> INSERT INTO COM_CLIENT VALUES (
2 111,
3 'ouldbah',
4 'chez lui',
5 15000,
6 '25/01/2013'
7 ); SQL> SELECT * FROM E_COMMANDE WHERE NO=111;
ORACLE PL/SQL
BASES DE DONNEES RELATIONNELLES
TRAVAUX
PRATIQUES
ORACLE PL/SQL
BASES DE DONNEES RELATIONNELLES
EXERCICE 1:
2. Créer un trigger qui met la date du jour de la création d’une ligne dans la colonne
Dt_Entree de la table E_employe, pour chaque ligne, si Dt_Entree est à NULL lors de
l’insertion.
3. Créer un trigger qui se déclenche sur la mise à jour de chaque ligne de la table
E_employe et qui renseigne la table E_augmentation.
ORACLE PL/SQL
BASES DE DONNEES RELATIONNELLES
EXERCICE 2:
ORACLE PL/SQL
BASES DE DONNEES RELATIONNELLES
2.1. Ecrire un trigger qui vérifie lors de la mise à jour du prix de vente d’un produit que le prix
de vente ne dépasse pas la marge correspondant à la catégorie du produit, sinon, un message
d’erreur doit être retourné et la mise à jour avortée. De même, dans ce cas, on doit archiver
dans la table ARCH_PRODS les anciennes valeurs du produit et les nouvelles valeurs. Le trigger
doit aussi vérifier lors d’une promotion, que le prix de vente n’est pas inférieur au prix d’achat
et lors de l’achat du produit que le prix d’achat ne dépasse pas le prix maximum autorisé
(PRIXACHATMAX)
ORACLE PL/SQL
BASES DE DONNEES RELATIONNELLES
2.2. Ecrire, un trigger qui, si le prix de vente n’est pas donnée lors de l’insertion, calcule
automatiquement ce prix selon la catégorie du produit et la marge maximale et l’insère dans le
tuple à insérer.
2.3. Créer une vue, contenant : NumCAT, PRIXACHATMAX, NumPROD, PrixAchat, PrixVente.
ORACLE PL/SQL
BASES DE DONNEES RELATIONNELLES
FIN
ORACLE PL/SQL