Un déclencheur de base de données est une procédure stockée qui s'exécute automatiquement chaque fois qu'un événement se produit. L'événement peut être une opération insert-delete-update.
Oracle initie un déclencheur 'AFTER INSERT' après qu'un événement d'insertion a eu lieu et un déclencheur 'AFTER UPDATE' après qu'un événement de mise à jour se soit produit.
Voyons un exemple du déclencheur 'AFTER INSERT'.
Syntaxe:
CREATE ou REPLACE TRIGGER nom_générateur
AFTER INSERT ON nom_table
POUR CHAQUE ROW
DÉCLARER
déclarations de variables
COMMENCER
déclaration de déclenchement
FIN;
Premier problème: nous voulons insérer un enregistrement dans la table 'emp_backup', si un enregistrement est inséré dans la table 'emp'.
Solution - Un déclencheur AFTER INSERT
Créons une table 'emp'.
SQL> create table emp (
numéro d'empid (10),
fname varchar (25),
lname varchar (25)
);
À présent créer un 'emp_backup' table avec la même structure que la table 'emp'.
SQL> créer la table emp_backup (
numéro d'empid (10),
fname varchar (25),
lname varchar (25)
);
Maintenant, pour insérer un enregistrement dans la table 'emp_backup' si un enregistrement est inséré dans la table 'emp', nous allons écrire un 'APRES INSERTION' Déclencheur.
SQL> CREATE or REPLACE TRIGGER emp_after_insert
APRÈS INSÉRER SUR emp
POUR CHAQUE ROW
DÉCLARER
COMMENCER
insérer dans les valeurs emp_backup (: new.empid,: new.fname,: new.lname);
DBMS_OUTPUT.PUT_LINE ('Enregistrement inséré avec succès dans la table emp_backup');
FIN;
Le déclencheur ci-dessus nommé 'emp_after_insert' est initié pour chaque ligne insérée dans emp table. Maintenant, si nous insérons une ligne dans la table 'emp', elle sera automatiquement insérée dans la table 'emp_backup'.
SQL> insérer dans les valeurs emp (1, 'jon', 'gibson');
Enregistrement inséré avec succès dans la table emp_backup
1 rangée créée.
Interrogez maintenant la table 'emp'.
SQL> select * from emp; EMPID FNAME LNAME ---------- ------------------------- ------------ ------------- 1 jon gibson
Interrogez la table 'emp_backup'.
SQL> select * from emp_backup; EMPID FNAME LNAME ---------- ------------------------- ------------ ------------- 1 jon gibson
Remarque: Si vous ne recevez pas le message 'Enregistrement inséré avec succès dans la table emp_backup'Faites la commande ci-dessous avant de créer le déclencheur.
SQL> set serveroutput on;
Voyons un exemple du déclencheur 'AFTER UPDATE'.
Syntaxe:
CREATE ou REPLACE TRIGGER nom_générateur
APRES MISE À JOUR SUR nom_table
POUR CHAQUE ROW
DÉCLARER
déclarations de variables
COMMENCER
déclaration de déclenchement
FIN;
Deuxième problème: nous voulons mettre à jour un enregistrement dans la table 'emp_backup' si un enregistrement correspondant est mis à jour dans la table 'emp'.
Comme nous avons déjà créé les deux tables dans l'exemple ci-dessus, nous allons écrire directement un déclencheur pour 'APRÈS LA MISE À JOUR'.
SQL> CREATE ou REPLACE TRIGGER emp_after_update APRES LA MISE A JOUR DE empid ON emp POUR CHAQUE ROW DECLARE BEGIN update update emp_backup set empid =: new.empid où empid =: old.empid; DBMS_OUTPUT.PUT_LINE ('empid mis à jour avec succès dans la table emp_backup'); FIN;
Le déclencheur ci-dessus nommé 'emp_after_update' sera lancé chaque fois que la colonne 'empid' de la table 'emp' sera mise à jour.
Maintenant, avant de mettre à jour la colonne 'empid' dans la table 'emp', voir les enregistrements de la table 'emp' et 'emp_backup'.
SQL> select * from emp; EMPID FNAME LNAME ---------- ------------------------- ------------ ------------- 1 jon gibson
SQL> select * from emp_backup; EMPID FNAME LNAME ---------- ------------------------- ------------ ------------- 1 jon gibson
Maintenant, mettez à jour la colonne 'empid' dans le tableau 'emp'.
SQL> update emp
set empid = 5
où empid = 1;
empid mis à jour avec succès dans la table emp_backup
1 ligne mise à jour.
Après la mise à jour de la table 'empid' dans 'emp', voyons la table 'emp_backup'.
SQL> select * from emp_backup; EMPID FNAME LNAME ---------- ------------------------- ------------ ------------- 5 jon gibson
Remarque: Si vous ne recevez pas le message 'empid mis à jour avec succès dans la table emp_backup'exécutez la commande ci-dessous avant de créer le déclencheur.
SQL> set serveroutput on;