Ein Datenbank-Trigger ist eine gespeicherte Prozedur, die automatisch ausgeführt wird, wenn ein Ereignis auftritt. Das Ereignis kann ein Einfüge-Lösch-Update-Vorgang sein.
Oracle initiiert einen 'AFTER INSERT'-Auslöser, nachdem ein Einfügungsereignis aufgetreten ist, und einen' AFTER UPDATE'-Auslöser, nachdem ein Updateereignis aufgetreten ist.
Sehen wir uns ein Beispiel für den 'AFTER INSERT'-Trigger an.
Syntax:
CREATE oder REPLACE TRIGGER auslösename
NACH INSERT ON Tabellenname
FÜR JEDE REIHE
ERKLÄREN
Variablendeklarationen
START
Trigger-Anweisung
ENDE;
Erstes Problem: Wir möchten einen Datensatz in die Tabelle 'emp_backup' einfügen, wenn ein Datensatz in die Tabelle 'emp' eingefügt wird.
Lösung - Ein AFTER INSERT-Trigger
Lassen Sie uns eine 'emp'-Tabelle erstellen.
SQL> Tabelle erstellen (
Empid-Nummer (10),
fname varchar (25),
lname varchar (25)
);
Jetzt ein 'emp_backup' erstellen Tabelle mit der gleichen Struktur wie 'Emp' Tabelle.
SQL> create_tabelle emp_backup (
Empid-Nummer (10),
fname varchar (25),
lname varchar (25)
);
Um nun einen Datensatz in die Tabelle 'emp_backup' einzufügen, wenn ein Datensatz in die Tabelle 'emp' eingefügt wird, schreiben wir eine 'NACH DEM EINSETZEN' Auslösen.
SQL> CREATE oder REPLACE TRIGGER emp_after_insert
NACH INSERT ON EMP
FÜR JEDE REIHE
ERKLÄREN
START
Einfügen in Werte für emp_backup (: new.empid,: new.fname,: new.lname);
DBMS_OUTPUT.PUT_LINE ('Datensatz erfolgreich in Tabelle emp_backup eingefügt');
ENDE;
Der oben genannte Auslöser mit dem Namen 'emp_after_insert' lautet für jede eingefügte Zeile eingeleitet in die Emp-Tabelle. Wenn wir nun eine Zeile in die 'emp'-Tabelle einfügen, wird diese automatisch in die' emp_backup'-Tabelle eingefügt.
SQL> in emp Werte einfügen (1, 'jon', 'gibson');
Der Datensatz wurde erfolgreich in die Tabelle emp_backup eingefügt
1 Zeile erstellt
Fragen Sie jetzt die 'emp'-Tabelle ab.
SQL> select * from emp; EMPID FNAME LNAME ---------- ------------------------- ------------ ------------- 1 jon gibson
Fragen Sie die 'emp_backup'-Tabelle ab.
SQL> select * aus emp_backup; EMPID FNAME LNAME ---------- ------------------------- ------------ ------------- 1 jon gibson
Hinweis: Wenn Sie die Nachricht nicht erhalten 'Der Datensatz wurde erfolgreich in die Tabelle emp_backup eingefügtFühren Sie den folgenden Befehl aus, bevor Sie den Auslöser erstellen.
SQL> Serveroutput setzen auf;
Sehen wir uns ein Beispiel für den Auslöser 'AFTER UPDATE' an.
Syntax:
CREATE oder REPLACE TRIGGER auslösename
NACH UPDATE ON Tabellenname
FÜR JEDE REIHE
ERKLÄREN
Variablendeklarationen
START
Trigger-Anweisung
ENDE;
Zweites Problem: Wir möchten, dass ein Datensatz in der Tabelle 'emp_backup' aktualisiert wird, wenn ein entsprechender Datensatz in der Tabelle 'emp' aktualisiert wird.
Da wir beide Tabellen im obigen Beispiel bereits erstellt haben, schreiben wir direkt einen Trigger für 'NACH DEM UPDATE'.
SQL> TRIGGER ERSTELLEN oder ERSETZEN emp_after_update NACH UPDATE VON empid ON emp FÜR JEDE ROW DECLARE BEGIN-Aktualisierung emp_backup set empid =: new.empid where empid =: old.empid; DBMS_OUTPUT.PUT_LINE ('empid wurde erfolgreich in emp_backup-Tabelle aktualisiert'); ENDE;
Der oben genannte Auslöser mit dem Namen 'emp_after_update' wird immer dann ausgelöst, wenn die 'empid'-Spalte in der' emp'-Tabelle aktualisiert wird.
Bevor Sie nun die 'empid'-Spalte in der' emp'-Tabelle aktualisieren, lesen Sie die Datensätze 'emp' und 'emp_backup'.
SQL> select * from emp; EMPID FNAME LNAME ---------- ------------------------- ------------ ------------- 1 jon gibson
SQL> select * aus emp_backup; EMPID FNAME LNAME ---------- ------------------------- ------------ ------------- 1 jon gibson
Aktualisieren Sie jetzt die Spalte 'empid' in der Tabelle 'emp'.
SQL> Emp. Aktualisieren
set empid = 5
wo empid = 1;
Empid wurde erfolgreich in der Emp_backup-Tabelle aktualisiert
1 Zeile aktualisiert
Lassen Sie uns nach dem Update von 'empid' in der 'emp'-Tabelle die' emp_backup'-Tabelle sehen.
SQL> select * aus emp_backup; EMPID FNAME LNAME ---------- ------------------------- ------------ ------------- 5 jon gibson
Hinweis: Wenn Sie die Nachricht nicht erhalten 'Empid wurde erfolgreich in der Emp_backup-Tabelle aktualisiert'Führen Sie den folgenden Befehl aus, bevor Sie den Auslöser erstellen.
SQL> Serveroutput setzen auf;