Tp4 Trigger
Tp4 Trigger
Tp4 Trigger
Ingénierie BD
Mme Boutaleb Manel
Rappel :
Un déclencheur (trigger en anglais) est une procédure stockée qui est automatiquement
exécutée (ou "déclenchée") en réponse à certains événements dans une base de données
Oracle. Ces événements peuvent inclure des opérations telles que l'insertion, la mise à jour
ou la suppression de lignes dans une table.
Syntaxe :
Un déclencheur Oracle a la structure de base suivante :
CREATE OR REPLACE TRIGGER nom_du_trigger
[BEFORE | AFTER] [INSERT | UPDATE | DELETE]
ON nom_de_la_table
[FOR EACH ROW]
DECLARE
-- Déclarations de variables et de constantes
BEGIN
-- Logique du déclencheur
END;
Exemple :
Imaginons que nous avons une table etudiants où les emails sont insérés, et nous voulons
nous assurer que l'email est toujours en minuscules avant d'être inséré, afin d'uniformiser
les données.
1. Créer la table etudiants avec les colonnes id_etudiant, nom, prenom, email :
1
prenom VARCHAR2(50),
email VARCHAR2(100));
Créer un trigger qui s'exécute avant l'insertion d'un étudiant et qui convertit
automatiquement l'email en minuscules avant de l'insérer dans la table.
Exercice:
Soit la BD de gestion de parc informatique suivante :
2
1. Écrivez le déclencheur Trig_Après_DI_Installer sur la table Installer permettant de
faire la mise à jour automatique des colonnes nbLog de la table Poste, et nbInstall de
la table Logiciel. Prévoir les cas de désinstallation d’un logiciel sur un poste, et
d’installation d’un logiciel sur un autre.
Pour tester:
3
INSERT INTO Poste (nPoste, nomPoste, indIP, ad, typePoste, nSalle, nblog)
VALUES (1, 'Poste1', 1, '192.168.1.2', 'PCc', 1, 105);
delete from Poste where nPoste=1;
rollback;
3. Écrivez le déclencheur Trig_Après_U_Salle sur la table Salle qui met à jour
automatiquement la colonne nbPoste de la table Segment après la modification de la colonne
nbPoste.
4
INSERT INTO Salle (nSalle, nomSalle, nbPoste, indIP)
VALUES (3, 'Salle301', 12, 3);
INSERT INTO Poste (nPoste, nomPoste, indIP, ad, typePoste, nSalle, nblog)
VALUES (2, 'Poste2', 2, '192.168.2.1', 'PC', 2, 201);
INSERT INTO Poste (nPoste, nomPoste, indIP, ad, typePoste, nSalle, nblog)
VALUES (3, 'Poste3', 3, '192.168.3.1', 'Laptop', 3, 301);
5
INSERT INTO Installer (nPoste, nLog, numIns, dateIns)
VALUES (3, 3, 1, TO_DATE('2022-04-03', 'YYYY-MM-DD'));