Oracle PL / SQL - Exemple de déclencheur après DELETE
Cet article vous montre comment utiliserAFTER DELETE TRIGGER, il se déclenchera une fois l'opération de suppression exécutée. Dans les scénarios de la vie réelle, il est principalement utilisé à des fins telles que:
-
Audit ou journalisation
1. Après le déclencheur DELETE
Dans cet exemple, si l'utilisateur a supprimé une ligne demedical_bills, la ligne supprimée sera insérée dansmedical_bills_history après le déclencheur de suppression sur la tablemedical_bills
1.1 Create tables and trigger.
factures médicales
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 | NUMÉRO DE FACTURE | NOM DE LA FÊTE | DATE DE FACTURATION | CRÉÉ PAR | CREATED_DATE |
|---|---|---|---|---|---|
1 |
BILL101 |
Peter Thomas |
12-MAI-2016 |
HR |
18-JUIN-2017 |
2 |
BILL102 |
Jemes Petil |
10-JUIN-2016 |
HR |
18-JUIN-2017 |
3 |
BILL103 |
Fujit su |
10-JUIL-2015 |
HR |
18-JUIN-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 | NUMÉRO DE FACTURE | NOM DE LA FÊTE | DATE DE FACTURATION | CRÉÉ PAR | CREATED_DATE |
|---|---|---|---|---|---|
2 |
BILL102 |
Jemes Petil |
10-JUIN-2016 |
HR |
18-JUIN-2017 |
select * from MEDICAL_BILLS_HISTORY;
| BILL_ID | NUMÉRO DE FACTURE | NOM DE LA FÊTE | DATE DE FACTURATION | CRÉÉ PAR | CREATED_DATE |
|---|---|---|---|---|---|
1 |
BILL101 |
Peter Thomas |
12-MAI-2016 |
SYSTÈME |
18-JUIN-2017 |
3 |
BILL103 |
Fujit su |
10-JUIL-2015 |
SYSTÈME |
18-JUIN-2017 |