Oracle PL/SQL – DELETEトリガーの後の例
この記事では、 `AFTER DELETE TRIGGER`の使い方を示します。削除操作が実行された後に起動します。現実のシナリオでは、主に次のような目的で使用されます。
-
監査またはロギング
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