Les déclencheurs (ou « triggers » en anglais) sont des objets de base de données qui réagissent automatiquement à certains événements ou actions qui se produisent dans la base de données. Ils sont utilisés pour automatiser des tâches, appliquer des règles métier (normes et standards), garantir la cohérence des données et effectuer des actions spécifiques lors de la modification d’une table ou d’une vue.
Ils peuvent être déclenchés par des événements tels que les opérations d’insertion, de mise à jour ou de suppression de données.
La syntaxe de base des déclencheurs (triggers) dans Oracle suit un modèle standard.
Voici la structure de base d’un déclencheur Oracle :
CREATE OR REPLACE TRIGGER nom_du_declencheur {BEFORE | AFTER | INSTEAD OF} {INSERT | UPDATE | DELETE | {INSERT OR} UPDATE | {INSERT OR} DELETE} ON nom_de_la_table [REFERENCING {OLD AS old | NEW AS new}] [FOR EACH {ROW | STATEMENT}] DECLARE -- Déclarations de variables locales BEGIN -- Logique du déclencheur -- Instructions SQL, conditions, logique métier, etc. EXCEPTION WHEN nom_de_l_exception THEN -- Gestion des exceptions (facultatif) END nom_du_declencheur; /
CREATE OR REPLACE TRIGGER
: Cette clause indique que vous créez ou remplacez un déclencheur. Si le déclencheur existe déjà avec le même nom, il sera remplacé par la nouvelle définition.nom_du_declencheur
: C’est le nom que vous donnez à votre déclencheur. Il doit être unique à l’intérieur de la base de données Oracle.{BEFORE | AFTER | INSTEAD OF}
: Cette partie indique quand le déclencheur doit être déclenché. Les options courantes sont « BEFORE
» (avant l’action), « AFTER
» (après l’action) et « INSTEAD OF
» (à la place de l’action, principalement utilisé pour les vues).{INSERT | UPDATE | DELETE | {INSERT OR} UPDATE | {INSERT OR} DELETE}
: Cela spécifie le type d’opération qui déclenchera le déclencheur. Vous pouvez choisir parmi les opérations courantes telles que l’insertion, la mise à jour et la suppression. Vous pouvez également spécifier des combinaisons, par exemple, « INSERT OR UPDATE
» pour déclencher le déclencheur lors d’une insertion ou d’une mise à jour.ON nom_de_la_table
: Cela spécifie la table sur laquelle le déclencheur sera appliqué.[REFERENCING {OLD AS old | NEW AS new}]
: Cette partie est utilisée pour référencer les anciennes et les nouvelles valeurs lors de la mise à jour des données. Elle est facultative et dépend de la logique du déclencheur.[FOR EACH {ROW | STATEMENT}]
: Cette clause indique si le déclencheur doit être exécuté pour chaque ligne modifiée (« ROW
« ) ou une fois pour toute l’instruction SQL (« STATEMENT
« ).DECLARE
: C’est le début du bloc de déclaration de variables locales.BEGIN
: C’est le début du bloc de code où vous définissez la logique du déclencheur. C’est là que vous effectuez des opérations SQL, utilisez des conditions, mettez en place des règles métier, etc.EXCEPTION
: Cette section est utilisée pour gérer les exceptions qui peuvent survenir pendant l’exécution du déclencheur. Vous pouvez spécifier différentes exceptions et définir comment elles doivent être gérées.END nom_du_declencheur;
: Cette ligne marque la fin du déclencheur./
: Le symbole « / » est utilisé pour exécuter le déclencheur et le créer dans la base de données.Cette structure de base permet de créer des déclencheurs Oracle pour automatiser des actions ou appliquer des règles métier en réponse à des modifications de données spécifiques dans une table. Il est possible de personnaliser davantage la logique du déclencheur en fonction des besoins de l’application.
CREATE OR REPLACE TRIGGER VerifierCredit BEFORE INSERT ON Commandes FOR EACH ROW DECLARE v_credit_disponible NUMBER; BEGIN SELECT CreditDisponible INTO v_credit_disponible FROM Clients WHERE IDClient = :NEW.IDClient; IF :NEW.MontantCommande > v_credit_disponible THEN RAISE_APPLICATION_ERROR(-20001, 'Crédit insuffisant.'); END IF; END VerifierCredit;
CREATE OR REPLACE TRIGGER JournalisationModifications AFTER UPDATE ON MaTable FOR EACH ROW BEGIN INSERT INTO JournalModifications (TableModifiee, DateModification, Utilisateur) VALUES ('MaTable', SYSTIMESTAMP, USER); END JournalisationModifications;
CREATE OR REPLACE TRIGGER GenererNumeroCommande BEFORE INSERT ON Commandes FOR EACH ROW BEGIN SELECT ma_sequence.NEXTVAL INTO :NEW.NumeroCommande FROM dual; END GenererNumeroCommande;
CREATE OR REPLACE TRIGGER ValiderDatesReservation BEFORE INSERT ON Reservations FOR EACH ROW BEGIN IF :NEW.DateDebut > :NEW.DateFin THEN RAISE_APPLICATION_ERROR(-20002, 'La date de début doit précéder la date de fin.'); END IF; END ValiderDatesReservation;
CREATE OR REPLACE TRIGGER SynchroniserDonnees AFTER INSERT OR UPDATE OR DELETE ON Produits FOR EACH ROW BEGIN IF INSERTING THEN -- Si une nouvelle ligne est insérée dans la table Produits, -- mettez à jour la table Stocks avec la nouvelle quantité en stock. INSERT INTO Stocks (IDProduit, QuantiteEnStock) VALUES (:NEW.IDProduit, :NEW.Quantite); ELSIF UPDATING THEN -- Si une ligne existante est mise à jour dans la table Produits, -- mettez à jour la table Stocks avec la nouvelle quantité en stock. UPDATE Stocks SET QuantiteEnStock = :NEW.Quantite WHERE IDProduit = :NEW.IDProduit; ELSIF DELETING THEN -- Si une ligne est supprimée dans la table Produits, -- supprimez également l'entrée correspondante dans la table Stocks. DELETE FROM Stocks WHERE IDProduit = :OLD.IDProduit; END IF; END SynchroniserDonnees;
Dans cet exemple, le déclencheur SynchroniserDonnees
est déclenché après toute opération d’insertion, de mise à jour ou de suppression dans la table « Produits ». En fonction de l’action effectuée, il met à jour automatiquement la table « Stocks » pour maintenir la cohérence des données entre les deux tables.
Notez que cet exemple est simplifié à des fins d’illustration. Dans un environnement de production réelle, la logique de synchronisation peut être plus complexe et tenir compte de plusieurs facteurs, tels que la gestion des transactions, la gestion des erreurs, etc.
Ces exemples mettent en lumière la polyvalence des déclencheurs d’une base de données, qui permettent d’automatiser des actions, de garantir l’intégrité des données et de maintenir la cohérence des données dans la base de données. Les déclencheurs sont un élément essentiel de la gestion de base de données pour garantir la fiabilité des données et l’application des règles métier.