Oracle Utilisation des déclencheurs AFTER INSERT et AFTER UPDATE

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;