Les modifications non contrôlées dans les bases de données peuvent compromettre l’intégrité des données.
Cela peut entraîner des erreurs coûteuses et des failles de sécurité si elles ne sont pas bien gérées.
L’article explore l’utilisation des déclencheurs SQL, de la clause WHEN et des prédicats pour une gestion optimale des opérations en base de données.
Maîtriser le langage SQL en environnement SGBDR. SQL n'aura plus de secrets pour vous !
Ce document vise à vous guider dans la création de déclencheurs avec des conditions de déclenchement (clause WHEN) et l’utilisation de prédicats (INSERTING, UPDATING, DELETING) dans des bases de données. Ces techniques permettent de mieux contrôler l’exécution des déclencheurs en fonction de conditions spécifiques.
Clause WHEN des déclencheurs SQL
Pour commencer, voyons comment utiliser la clause WHEN pour conditionner l’exécution d’un déclencheur. Cette clause est particulièrement utile lorsque vous souhaitez que le déclencheur ne s’exécute que si certaines conditions sont remplies.
La clause WHEN s’utilise simplement en indiquant une condition qui doit être remplie pour déclencher l’action.
WHEN
Exemple pratique
Voici un exemple de déclencheur qui utilise la clause WHEN pour détecter les augmentations de salaire suspectes.
CREATE TABLE AUDIT_SECURITE (
datemaj DATE,
utilisateur VARCHAR2(50),
ancien_salaire NUMBER,
nouveau_salaire NUMBER,
message VARCHAR2(100)
);
CREATE OR REPLACE TRIGGER tracerAugmentation
BEFORE UPDATE ON salaries FOR EACH ROW
WHEN (NEW.salaire > OLD.salaire * 1.2)
BEGIN
INSERT INTO audit_securite VALUES (
SYSDATE,
USER,
:OLD.salaire,
:NEW.salaire,
'Augmentation suspecte de plus de 20%'
);
END tracerAugmentation;
Explication du trigger
Dans cet exemple, le déclencheur tracerAugmentation est configuré pour s’exécuter avant chaque mise à jour de la table salaries et pour chaque ligne. Son objectif est de détecter les augmentations de salaire supérieures à 20 % de l’ancien salaire.
Condition : Le déclencheur ne se déclenche que si le nouveau salaire (:NEW.salaire) est supérieur de plus de 20 % à l’ancien salaire (:OLD.salaire * 1.2).
Action : Si cette condition est remplie, une ligne est insérée dans la table audit_securite avec les informations suivantes :
- La date actuelle (SYSDATE),
- L’utilisateur ayant effectué la modification (USER),
- L’ancien salaire ( :OLD.salaire),
- Le nouveau salaire ( :NEW.salaire),
- Un message indiquant une « Augmentation suspecte de plus de 20 % ».
Enfin, pour vérifier le bon fonctionnement des déclencheurs, vous pouvez effectuer les tests suivants :
Effectuez une mise à jour de salaire un enregistrement dans salaries.
UPDATE salaries SET salaire = salaire * 1.25 ;
Voici le résultat après exécution de bloc :
Fonctions prédicats pour triggers
Passons maintenant aux fonctions prédicats, qui permettent de vérifier le type d’opération qui a déclenché le déclencheur. Ces prédicats retournent TRUE ou FALSE selon l’instruction de manipulation de données (LMD) qui est en cours : INSERT, UPDATE, ou DELETE.
Principaux prédicats
- INSERTING :Retourne TRUE si l’instruction LMD est un INSERT.
- UPDATING :Retourne TRUE si l’instruction LMD est un UPDATE.
- DELETING :Retourne TRUE si l’instruction LMD est un DELETE.
Pour illustrer l’utilisation des prédicats, voici un exemple où nous créons un déclencheur qui enregistre le type d’opération effectuée sur la table salaries dans une table d’audit.
CREATE TABLE AUDIT_INSTRUCTIONS (
dateinst DATE,
utilisateur VARCHAR2(20),
typeinst VARCHAR2(50)
);
CREATE OR REPLACE TRIGGER typeInstructionSalaries
BEFORE INSERT OR UPDATE OR DELETE ON salaries
BEGIN
IF INSERTING THEN
INSERT INTO AUDIT_INSTRUCTIONS VALUES (
SYSDATE,
USER,
'Exécution INSERT sur SALAIRES'
);
END IF;
IF UPDATING THEN
INSERT INTO AUDIT_INSTRUCTIONS VALUES (
SYSDATE,
USER,
'Exécution UPDATE sur SALAIRES'
);
END IF;
IF DELETING THEN
INSERT INTO AUDIT_INSTRUCTIONS VALUES (
SYSDATE,
USER,
'Exécution DELETE sur SALAIRES'
);
END IF;
END typeInstructionSalaries;
Explications
Ce déclencheur typeInstructionSalaries enregistre dans la table audit_instructions le type d’opération (INSERT, UPDATE, ou DELETE) qui a été effectué sur la table salaries.
- INSERTING :Si l’opération est un INSERT, une ligne est ajoutée dans audit_instructions indiquant qu’une insertion a été effectuée.
- UPDATING :Si l’opération est une mise à jour (UPDATE), une ligne est ajoutée pour indiquer une modification.
- DELETING :Si l’opération est une suppression (DELETE), une ligne est ajoutée pour indiquer une suppression.
Pour tester le déclencheur en va insérez, mettez à jour, et supprimez un enregistrement dans salaries.
INSERT INTO salaries VALUES(5, 'Ramou', 'Dacos', 'Encore un chef', 2000, NULL);
SELECT * FROM AUDIT_INSTRUCTIONS;
Voici le résultat après exécution de bloc :
Formez-vous gratuitement avec Alphorm !
Maîtrisez les compétences clés en IT grâce à nos formations gratuites et accélérez votre carrière dès aujourd'hui.
FAQ
Comment utiliser la clause WHEN dans les déclencheurs SQL?
Quelles sont les fonctions prédicats dans les déclencheurs?
Comment enregistrer les opérations dans une table d'audit avec des déclencheurs?
Quels sont les avantages de l'utilisation de déclencheurs SQL?
Comment tester l'efficacité des déclencheurs SQL?
Conclusion
Les déclencheurs SQL sont des outils puissants pour automatiser et sécuriser les opérations en base de données. Quels autres scénarios complexes envisagez-vous d’automatiser avec des déclencheurs?