CREATE TABLE trg_demo
(
e_id NUMBER(10),
e_name VARCHAR2(30),
CONSTRAINT pk_trg_demo PRIMARY KEY (e_id)
);
CREATE SEQUENCE trg_audit_sq;
CREATE TABLE trg_audit
(
a_id NUMBER(10),
modified_date TIMESTAMP,
CONSTRAINT pk_trg_audit PRIMARY KEY (a_id)
);
扳機:
CREATE OR REPLACE TRIGGER trigger_trg
BEFORE INSERT
ON trg_demo
FOR EACH ROW
BEGIN
INSERT INTO trg_audit
VALUES (trg_audit_sq.nextval, current_timestamp);
END;
INSERT INTO trg_demo VALUES (1, 'A');
INSERT INTO trg_demo VALUES (2, 'B');
預期輸出:
------ ---------------
| A_ID | MODIFIED_DATE |
------ ---------------
| 1 | 16-12-21 |
------ ---------------
我將trg_demo在 2 天內將行插入表中。所以,假設今天如果我在trg_audit表中插入 2 行,它只會插入今天的日期的一行,然后在 2 天后如果我在trg_demo表中插入 4 行,那么trg_audit它會有第二行 A_ID 為 2 和日期作為18-12-21。
uj5u.com熱心網友回復:
您可以在觸發器內使用條件來防止其余的并只接受一條記錄:
CREATE OR REPLACE TRIGGER trigger_trg
BEFORE INSERT
ON trg_demo
FOR EACH ROW
declare
flag number;
BEGIN
select count(*) into flag from trg_audit d where trunc(d.modified_date) = trunc(sysdate) ;
if flag < 1 then
INSERT INTO trg_audit
VALUES (trg_audit_sq.nextval, current_timestamp);
end if ;
END;
uj5u.com熱心網友回復:
請注意,雖然觸發器可以將資料添加到審計表中,但請確保對正在使用的觸發器進行 2 次更新 -
如果您希望在每次資料加載時將 1 行插入到表中以避免重復審計詳細資訊,請使用陳述句級觸發器。
盡可能在插入后使用,因為知道插入是否發生的真正方法是在插入后觸發它,以防萬一插入因資料約束要求而實際失敗,除非您的要求是跟蹤外插入嘗試具體表。
創建或替換觸發器customers_credit_trg
AFTER INSERT ON trg_demo FOR EACH ROW BEGIN INSERT INTO trg_audit VALUES (trg_audit_sq.nextval, current_timestamp); END;
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/385713.html
