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

  1. 監査またはロギング

1. DELETEトリガーの後

この例では、ユーザが

medical

bills`の行を削除した場合、削除された行は


medicalbills`テーブルのdeleteトリガによって `medical

bills

history`に挿入されます

1.1テーブルとトリガーを作成します。

医療費

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 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データを表示します。

select **  from MEDICAL__BILLS;

| =========================================== ==================== | BILL

ID | BILL

NUMBER | PARTY

NAME | BILL

DATE | CREATED

BY | CREATED

DATE | 1 | BILL101 | Peter Thomas | 12-MAY-2016 | HR | 18- JUN-2017 | 2 | BILL102 | Jemes Petil | 10-JUN-2016 | HR | 18-JUN-2017 | 3 | BILL103 | Fujitsu | 10-JUL-2015 | HR | 18-JUN-2017 | ==== ========================================== ===============

select **  from MEDICAL__BILLS__HISTORY;

-- no result

1.4 Delete some rows from table

MEDICAL__BILLS

bill__id = 1のMEDICAL__BILLSから削除します。

bill__id = 3のMEDICAL__BILLSから削除します。

1.5データをもう一度表示します。

MEDIA__BILLSから** を選択します。

[cols = “,,,,,”、options = “header”、]| =========================================== ==================
| BILL

ID | BILL

NUMBER | PARTY

NAME | BILL

DATE | CREATED

BY | CREATED

DATE
| 2 | BILL102 | Jemes Petil | 10-JUN-2016 | HR | 18-JUN-2017
| =========================================== ==================

MEDIA__BILLS__HISTORYから** を選択します。

[cols = “,,,,,”、options = “header”、]| =========================================== ==================
| BILL

ID | BILL

NUMBER | PARTY

NAME | BILL

DATE | CREATED

BY | CREATED

DATE
| 1 | BILL101 |ピーター・トーマス| 12年5月12日|システム| 18-JUN-2017
| 3 | BILL103 | Fujitsu | 10-JUL-2015 | SYSTEM | 18-JUN-2017
| =========================================== ==================

===参考文献



https://docs.oracle.com/cd/B19306


01/server.102/b14200/statements

7004.htm#i2153487[Creating
DMLトリガー:例]。

https://docs/トリガ

: – Oracleの公式ドキュメント]。リンク://oracle/oracle-plsql-before-delete-trigger-example/[Oracle
PL/SQL – DELETEトリガーの例前]

削除後


audit


ロギング

リンク://タグ/oracle/[oracle]

plsql


trigger