Oracle PL/SQL - Пример после УДАЛИТЬ Триггер

Oracle PL / SQL - пример триггера после DELETE

В этой статье показано, как использоватьAFTER DELETE TRIGGER, он сработает после выполнения операции удаления. В сценариях реальной жизни он в основном используется для следующих целей:

  1. Аудит или ведение журнала

1. После триггера DELETE

В этом примере, если пользователь удалил строкуmedical_bills, удаленная строка будет вставлена ​​вmedical_bills_history после триггера удаления в таблицеmedical_bills

1.1 Create tables and trigger.

Медицинские счета

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
);

медицинские_счета_история

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 НОМЕР СЧЕТА PARTY_NAME BILL_DATE СОЗДАН ДАТА СОЗДАНИЯ

1

BILL101

Питер Томас

12-МАЯ-2016

HR

18-ИЮН-2017

2

BILL102

Jemes Petil

10-ИЮН-2016

HR

18-ИЮН-2017

3

BILL103

Fujit su

10-ИЮЛ-2015

HR

18-ИЮН-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 НОМЕР СЧЕТА PARTY_NAME BILL_DATE СОЗДАН ДАТА СОЗДАНИЯ

2

BILL102

Jemes Petil

10-ИЮН-2016

HR

18-ИЮН-2017

select * from MEDICAL_BILLS_HISTORY;
BILL_ID НОМЕР СЧЕТА PARTY_NAME BILL_DATE СОЗДАН ДАТА СОЗДАНИЯ

1

BILL101

Питер Томас

12-МАЯ-2016

СИСТЕМА

18-ИЮН-2017

3

BILL103

Fujit su

10-ИЮЛ-2015

СИСТЕМА

18-ИЮН-2017