Oracle Utilizzo dei trigger AFTER INSERT e AFTER UPDATE

Un trigger del database è una stored procedure che viene eseguita automaticamente ogni volta che si verifica un evento. L'evento potrebbe essere operazioni di inserimento-cancellazione-aggiornamento.

Oracle avvia un trigger 'AFTER INSERT' dopo che si è verificato un evento di inserimento e un trigger 'AFTER UPDATE' dopo che si è verificato un evento di aggiornamento.

Vediamo un esempio per il trigger 'AFTER INSERT'.

Sintassi:

CREA o SOSTITUISCI TRIGGER trigger_name
DOPO INSERT ON table_name
PER OGNI FILA
DICHIARARE
dichiarazioni variabili
INIZIO
dichiarazione di trigger
FINE;

Primo problema: vogliamo inserire un record nella tabella 'emp_backup', se un record è inserito nella tabella 'emp'.

Soluzione: un trigger AFTER INSERT

Creiamo una tabella 'emp'.

SQL> create table emp (
numero empid (10),
fname varchar (25),
lname varchar (25)
);

Adesso crea un 'emp_backup' tabella con la stessa struttura della tabella 'emp'.

SQL> create table emp_backup (
numero empid (10),
fname varchar (25),
lname varchar (25)
);

Ora, per inserire un record nella tabella 'emp_backup' se un record è inserito nella tabella 'emp', scriveremo un 'DOPO L'INSERIMENTO' Trigger.

SQL> CREATE o REPLACE TRIGGER emp_after_insert
DOPO L'INSERIMENTO ON emp
PER OGNI FILA
DICHIARARE
INIZIO
inserire nei valori emp_backup (: new.empid,: new.fname,: new.lname);
DBMS_OUTPUT.PUT_LINE ('Registra correttamente inserito nella tabella emp_backup');
FINE;

Il trigger precedente denominato "emp_after_insert" è avviato per ogni riga inserita nella tabella emp. Ora, se inseriamo una riga nella tabella 'emp', questa verrà automaticamente inserita nella tabella 'emp_backup'.

SQL> inserire in valori emp (1, 'jon', 'gibson');
Registra correttamente inserito nella tabella emp_backup
1 riga creata.

Ora interrogare la tabella 'emp'.

SQL> seleziona * da emp; EMPID FNAME LNAME ---------- ------------------------- ------------ ------------- 1 jon gibson

Interrogare la tabella 'emp_backup'.

SQL> select * from emp_backup; EMPID FNAME LNAME ---------- ------------------------- ------------ ------------- 1 jon gibson


Nota: se non ricevi il messaggio 'Registra correttamente inserito nella tabella emp_backup'fai il seguente comando prima di creare il trigger.

SQL> imposta servoutput su;

Vediamo un esempio per l'innesco 'AFTER UPDATE'.

Sintassi:

CREA o SOSTITUISCI TRIGGER trigger_name
AFTER UPDATE ON table_name
PER OGNI FILA
DICHIARARE
dichiarazioni variabili
INIZIO
dichiarazione di trigger
FINE;

Secondo problema: Vogliamo o aggiornare un record nella tabella 'emp_backup' se un record corrispondente viene aggiornato nella tabella 'emp'.

Dato che abbiamo già creato entrambe le tabelle nell'esempio sopra, scriveremo direttamente un trigger per 'DOPO AGGIORNAMENTO'.

SQL> CREATE o REPLACE TRIGGER emp_after_update AFTER UPDATE OF empid ON emp PER OGNI FILA DECLARE BEGIN update emp_backup set empid =: new.empid dove empid =: old.empid; DBMS_OUTPUT.PUT_LINE ('empid aggiornato con successo nella tabella emp_backup'); FINE;

Il trigger precedente denominato "emp_after_update" verrà avviato ogni volta che la colonna "empid" nella tabella "emp" viene aggiornata.

Ora, prima di aggiornare la colonna "empid" nella tabella "emp", vedi i record delle tabelle "emp" e "emp_backup".

SQL> seleziona * da emp; EMPID FNAME LNAME ---------- ------------------------- ------------ ------------- 1 jon gibson
SQL> select * from emp_backup; EMPID FNAME LNAME ---------- ------------------------- ------------ ------------- 1 jon gibson

Ora aggiorna la colonna 'empid' nella tabella 'emp'.

SQL> aggiornamento emp
imposta empid = 5
dove empid = 1;
empid aggiornato con successo nella tabella emp_backup
1 riga aggiornata.

Dopo l'aggiornamento di 'empid' nella tabella 'emp', vediamo la tabella 'emp_backup'.

SQL> select * from emp_backup; EMPID FNAME LNAME ---------- ------------------------- ------------ ------------- 5 jon gibson

Nota: se non ricevi il messaggio 'empid aggiornato con successo nella tabella emp_backup'esegui il comando qui sotto prima di creare il trigger.

SQL> imposta servoutput su;