PLSQL触发器记录更新到审计表如果Column_X更新

时间:2016-12-06 16:30:06

标签: oracle plsql triggers

如果表中的特定列收到更新,我试图密切注意,如果是,则将该更改插入审核表。我已经能够编写此触发器来执行此操作,如果任何列更改,或者我的列更改为特定值但由于某种原因我尝试比较old.column_x!= new.column_x时它没有记录更新。我尝试了几种代码,这是我尝试过的最新版本。

CREATE OR REPLACE TRIGGER audit_table
AFTER UPDATE ON table_1
FOR EACH ROW
WHEN (new.column_x != old.column_x)
BEGIN
INSERT INTO audit_table (
    column_1,
    old_column_x,
    new_column_x,
    auditdtm
    )
VALUES (
    :old.column_1,
    :old.column_x,
    :new.column_x,
    SYSDATE); 
END

1 个答案:

答案 0 :(得分:0)

谢谢Gurwinder Singh,我想这就是你告诉我试试的。考虑到我的数据总是处于/处于NULL状态,这是可行的,尽管可能有一种更漂亮的方式来编写它。

CREATE OR REPLACE TRIGGER audit_table
AFTER UPDATE ON table_1
FOR EACH ROW
WHEN ((new.column_x IS NULL AND old.column_x IS NOT NULL) OR (new.column_x IS NOT NULL AND old.column_x IS NULL))
BEGIN
INSERT INTO audit_table (
    column_1,
    old_column_x,
    new_column_x,
    auditdtm
    )
VALUES (
    :old.column_1,
    :old.column_x,
    :new.column_x,
    SYSDATE); 
END