TP
TP8: BASE DE DONNEES AVANCEES (S3 :
2020/2021)
- Triggers (déclencheurs
(déclencheurs)
Triggers (déclencheurs)
Exercice 1 :
La table articles (nom_Prodd (varchar2), Quantite (number)
(number), Prix_u(number)
(number) , cout (number)) contient les
détails sur les produit, où cout est une colonne calculée, elle enregistre le cout de l’article, elle est
calculé par cout =prix_u * quantite
1- Créer cette table
2- Insérer la ligne suivante nom_prod= LapTopHP
LapTopHP,Quantite=5,
te=5, prix=3600,00
3- Faire un select* from articles
articles, Que est ce que vous constatez pour le champ cout ?
4- Vous allez remédier à ce constat en créant le trigger suivant
CREATE OR REPLACE TRIGGER ARTCILE_TRG1
BEFORE
INSERT OR UPDATE ON ARTICLES
FOR EACH ROW
BEGIN
:NEW.COUT := :NEW.QUANTITE * :NEW.PRIX;
END;
5- Test de Trigger ARTCILE_TRG1
5.1 - Maintenant insérer les lignes suivantes dans la table ARTICLES :
Nom_prod Quantite Prix
Lap_Top_COM 10 2000,5
Mouse_king 40 20,00
USB_Key_Row 60 23,00
Lap_Top_Del 2 2300,00
5.2 - faire un select * from ARTICLES
ARTICLES,, Que est ce que vous constatez pour le champ
cout ? Expliquer … ?
5.3 – en une seule instruction, Procéder à une mise à jour du prix de tous les articles
Lap_Top à 2500,, Qu’est
Qu’est-ce que vous constatez pour le champ cout ? Expliquer … ?
6- Le statut de trigger peut être activé ou désactivé (ENABLE or DISABLE)
6.1 Vérifier que le trigger ARTICLE_TRG1 est actif.
6.2 On peut gérer les trigger par la commande ALTER TRIGGER
Par exemple, pour désactivé le trigger ARTICLE_TRG1 :
ALTER TRIGGER ARTICLE_TRG1 DISABLE
Et pour l’activer
ALTER TRIGGER ARTCILE_TRG1 ENABLE
a- Désactiver le trigger et essayer d’insérer un nouveau enregistrement ou de MAJ la
table ARTICLES, Que est ce que vous constatez pour le champ cout ? Expliquer … ?
b- Activer le de nouveau et essayer d’insérer un nouveau enregistrement ou de MAJ la
table ARTICLES, Que est ce que vous constatez pour le champ cout ? Expliquer … ?
Exercice 2 :
Les déclencheurs (Triggers)prouventdéclarer des exceptions et prévenir une modification indésirable
d’une table.Dans cet exemple nous allons créer un trigger EMP_TRG1 qui bloque une modification du
salaire d’un employé dans la table EMPLOYEES parvenu d’un utilisateur non autorisé à le faire
CREATE OR REPLACE TRIGGER EMP_TRG1
BEFORE UPDATE OF SALARY ON EMPLOYEES
FOR EACH ROW
DECLARE
User_non_autorise EXCEPTION;
BEGIN
IF (USER <> 'HR') THEN
RAISE User_non_autorise ;
END IF;
EXCEPTION WHEN User_non_autorise THEN
RAISE_APPLICATION_ERROR(-20001, 'SEUL le MANAGER peut CHANGER le
Salaire');
END;
Le trigger utilise la procédureRAISE_APPLICATION_ERROR, qui prend deux paramètres,
Numéro de l’erreur (tout numéro entre –20001 et –20999) et le message d’erreur qu’on désire
afficher à l’écran.
1- Pour tester ce trigger
1.a)faire un update de salaire d’un employé de votre choix
1.b) créer un autre utilisateur TEST_ESTM
Create user TEST_ESTM identified by estm ;
Crantresource,connect to TEST_ESTM ;
Grant update on EMPLOYEES to TEST_ESTM ;
1.c) se connecter en tant que TEST_ESTM et faire la MAJ de salaire des employées de
département 30. Qu’est-ce que vous constatez ?, expliquez ?
2- Désactiver le trigger et faire le même ’UPDATE que dans 1.c par l’utilisateur TEST_ESTM
Qu’est-ce que vous constatez ?, expliquez ?
Exercice 3 :
Créer la table EVALUATION (id , note_DS1,note_DS2,note_DSTP, Moyenne) tous ces champs sont de
type number , la colonne moyenne est la moyenne des notes des 3 DS .
1- On veut créer un trigger Evalu_TRG pour calculer la moyenne quelles sont les ordre MLD à
prévoir pour ce trigger.
2- Créer le trigger Evalu_TRG.
3- Tester ce trigger avec les order MLD concernées.