En databasutlösare är en lagrad procedur som automatiskt utförs när en händelse inträffar. Händelsen kan vara insert-delete-update-operationer.
Oracle initierar en "Efter INSERT" -triggare efter att en inmatningshändelse har inträffat och en "Efter uppdatering" -triggare efter att en uppdateringshändelse har inträffat.
Låt oss se ett exempel för "Efter inSERT" -triggare.
Syntax:
SKAPA eller BYTA TRIGGER trigger_name
EFTER INSERT PÅ tabellnamn
FÖR VARJE RÅD
FÖRKLARA
variabla deklarationer
BÖRJA
utlösande uttalande
SLUTET;
Första problemet: Vi vill infoga en post i tabellen emp_backup, om en post läggs in i emp-tabellen.
Lösning - En efter INSERT Trigger
Låt oss skapa ett emp-bord.
SQL> skapa tabell emp (
empidnummer (10),
fname varchar (25),
lname varchar (25)
);
Nu skapa en "emp_backup" bord med samma struktur som "emp" bord.
SQL> skapa tabell emp_backup (
empidnummer (10),
fname varchar (25),
lname varchar (25)
);
Nu, för att infoga en post i 'emp_backup'-tabellen om en post sätts in i' emp'-tabell, skriver vi en "INTER INSERT" Trigger.
SQL> CREATE eller REPLACE TRIGGER emp_after_insert
EFTER INSERT PÅ emp
FÖR VARJE RÅD
FÖRKLARA
BÖRJA
sätt in i emp_backup-värdena (: new.empid,: new.fname,: new.lname);
DBMS_OUTPUT.PUT_LINE ("Spela in framgångsrikt infört i emp_backup-tabellen");
SLUTET;
Ovanstående trigger kallad 'emp_after_insert' är initierad för varje rad införd in i emp tabell. Om vi lägger in en rad i emp-tabellen läggs den automatiskt in i emp_backup-tabellen.
SQL> infoga i emp-värden (1, 'jon', 'gibson');
Spela in framgångsrikt infört i emp_backup-tabellen
1 rad skapad.
Fråga nu "emp" -tabellen.
SQL> välj * från emp; EMPID FNAME LNAME ---------- ------------------------- ------------ ------------- 1 Jon Gibson
Fråga 'emp_backup'-tabellen.
SQL> välj * från emp_backup; EMPID FNAME LNAME ---------- ------------------------- ------------ ------------- 1 Jon Gibson
Obs! Om du inte får meddelandet "Spela in framgångsrikt infört i emp_backup-tabellen'gör kommandot nedan innan du skapar avtryckaren.
SQL> Sätta serverutmatning på;
Låt oss se ett exempel på "Efter uppdatering" -utlösare.
Syntax:
SKAPA eller BYTA TRIGGER trigger_name
EFTER UPPDATERING PÅ tabellnamn
FÖR VARJE RÅD
FÖRKLARA
variabla deklarationer
BÖRJA
utlösande uttalande
SLUTET;
Andra problemet: Vi vill o uppdatera en post i tabellen 'emp_backup' om en motsvarande post uppdateras i emp-tabellen.
Eftersom vi redan har skapat båda tabellerna i ovanstående exempel, skriver vi direkt en trigger för "Efter uppdatering".
SQL> CREATE eller REPLACE TRIGGER emp_after_update EFTER UPPDATERING av empid på emp FÖR VARJE RADDEKLARERA BEGIN uppdatering emp_backup set empid =: new.empid where empid =: old.empid; DBMS_OUTPUT.PUT_LINE ("empid framgångsrikt uppdaterad till emp_backup tabell"); SLUTET;
Ovanstående trigger som heter 'emp_after_update' kommer att initieras när "empid" -kolumnen i emp-tabellen uppdateras.
Nu innan du uppdaterar 'empid'-kolumnen i emp-tabellen, se emp-och emp_backup-tabellen.
SQL> välj * från emp; EMPID FNAME LNAME ---------- ------------------------- ------------ ------------- 1 Jon Gibson
SQL> välj * från emp_backup; EMPID FNAME LNAME ---------- ------------------------- ------------ ------------- 1 Jon Gibson
Nu uppdatera kolumnen Emp empel i emp-tabellen.
SQL> uppdatera emp
set empid = 5
där empid = 1;
empid framgångsrikt uppdaterad till emp_backup tabellen
1 rad uppdaterad.
Efter uppdatering av "empid" i "emp" -bordet, låt oss se tabellen "emp_backup".
SQL> välj * från emp_backup; EMPID FNAME LNAME ---------- ------------------------- ------------ ------------- 5 Jon Gibson
Obs! Om du inte får meddelandet "empid framgångsrikt uppdaterad till emp_backup tabellen'kör kommandot nedan innan du skapar avtryckaren.
SQL> Sätta serverutmatning på;