Oracle PL/SQL - DELETEトリガーの後の例

Oracle PL / SQL – DELETEトリガー後の例

この記事では、AFTER DELETE TRIGGERの使用方法を説明します。削除操作が実行された後に起動します。 現実のシナリオでは、主に次のような目的で使用されます。

  1. 監査またはログ

1. DELETEトリガーの後

この例では、ユーザーがmedical_billsの行を削除した場合、削除された行は、テーブルmedical_billsの削除トリガーの後にmedical_bills_historyに挿入されます。

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

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 BILL_NUMBER PARTY_NAME BILL_DATE によって作成された 作成日

1

BILL101

ピータートーマス

2016年5月12日

HR

2017年6月18日

2

BILL102

ジェームズ・ペティル

2016年6月10日

HR

2017年6月18日

3

BILL103

富士通

2015年7月10日

HR

2017年6月18日

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 BILL_NUMBER PARTY_NAME BILL_DATE によって作成された 作成日

2

BILL102

ジェームズ・ペティル

2016年6月10日

HR

2017年6月18日

select * from MEDICAL_BILLS_HISTORY;
BILL_ID BILL_NUMBER PARTY_NAME BILL_DATE によって作成された 作成日

1

BILL101

ピータートーマス

2016年5月12日

システム

2017年6月18日

3

BILL103

富士通

2015年7月10日

システム

2017年6月18日