Oracle PL / SQL - Beispiel für DELETE Trigger
Dieser Artikel zeigt Ihnen, wie SieAFTER DELETE TRIGGER
verwenden. Er wird ausgelöst, nachdem der Löschvorgang ausgeführt wurde. In realen Szenarien wird es hauptsächlich für folgende Zwecke verwendet:
-
Überwachung oder Protokollierung
1. Nach DELETE Trigger
Wenn in diesem Beispiel der Benutzer eine Zeile mitmedical_bills
gelöscht hat, wird die gelöschte Zeile nach dem Löschauslöser in Tabellemedical_bills
inmedical_bills_history
eingefügt
1.1 Create tables and trigger.
medizinische Rechnungen
CREATE TABLE medical_bills ( BILL_ID number(10) primary key, BILL_NUMBER varchar2(20), PARTY_NAME varchar2(50), BILL_DATE date, CREATED_BY varchar2(20), CREATED_DATE date );
medical_bills_history
CREATE TABLE medical_bills_history ( BILL_ID number(10), BILL_NUMBER varchar2(20), PARTY_NAME varchar2(50), BILL_DATE date, DELETED_BY varchar2(20), DELETED_DATE date );
trg_after_delete_bill
CREATE OR REPLACE TRIGGER trg_after_delete_bill AFTER DELETE ON medical_bills FOR EACH ROW DECLARE username varchar2(10); BEGIN -- current login user, in this example, system SELECT user INTO username FROM dual; -- Insert OLD values in history table with username of user performing delete and sysdate as deleted_Date. INSERT INTO medical_bills_history VALUES(:OLD.BILL_ID, :OLD.BILL_NUMBER,:OLD.PARTY_NAME,:OLD.BILL_DATE,username,sysdate); END;
1.2 Insert data for testing.
INSERT INTO MEDICAL_BILLS values (1,'BILL101','Peter Thomas','12-MAY-2016','HR',sysdate); INSERT INTO MEDICAL_BILLS values (2,'BILL102','Jemes Petil','10-JUN-2016','HR',sysdate); INSERT INTO MEDICAL_BILLS values (3,'BILL103','Fujit su','10-JUL-2015','HR',sysdate);
1.3 Display the data.
select * from MEDICAL_BILLS;
BILL_ID | RECHNUNGSNUMMER | PARTEINAMEN | RECHNUNGSDATUM | ERSTELLT VON | CREATED_DATE |
---|---|---|---|---|---|
1 |
BILL101 |
Peter Thomas |
12. MAI 2016 |
HR |
18. Juni 2017 |
2 |
BILL102 |
Jemes Petil |
10. Juni 2016 |
HR |
18. Juni 2017 |
3 |
BILL103 |
Fujit su |
10. Juli 2015 |
HR |
18. Juni 2017 |
select * from MEDICAL_BILLS_HISTORY; -- no result
1.4 Delete some rows from table MEDICAL_BILLS
DELETE FROM MEDICAL_BILLS WHERE bill_id = 1; DELETE FROM MEDICAL_BILLS WHERE bill_id = 3;
1.5 Display the data again.
select * from MEDICAL_BILLS;
BILL_ID | RECHNUNGSNUMMER | PARTEINAMEN | RECHNUNGSDATUM | ERSTELLT VON | CREATED_DATE |
---|---|---|---|---|---|
2 |
BILL102 |
Jemes Petil |
10. Juni 2016 |
HR |
18. Juni 2017 |
select * from MEDICAL_BILLS_HISTORY;
BILL_ID | RECHNUNGSNUMMER | PARTEINAMEN | RECHNUNGSDATUM | ERSTELLT VON | CREATED_DATE |
---|---|---|---|---|---|
1 |
BILL101 |
Peter Thomas |
12. MAI 2016 |
SYSTEM |
18. Juni 2017 |
3 |
BILL103 |
Fujit su |
10. Juli 2015 |
SYSTEM |
18. Juni 2017 |