【发布时间】:2020-11-10 18:22:39
【问题描述】:
我必须在单个审计表 test_audit 中跟踪数据更改,该表可用于其他触发器来跟踪更改。我已经尝试过这段代码,但一直在填充新旧值。 非常感谢您对此提供任何帮助。
create table test (ID NUMBER , ENAME VARCHAR2(10) , LOCATION VARCHAR2(10));
create or replace trigger my_trigger
after update on TEST
for each row
declare
ACTION VARCHAR2(10);
begin
IF DELETING THEN
ACTION := 'DELETE';
ELSIF UPDATING THEN
ACTION := 'UPDATE';
END IF;
for i in (select column_name,table_name from all_tab_columns
where table_name = 'TEST'
)
loop
if updating(i.column_name) then
INSERT
INTO TEST_AUDIT
(
TABLE_NAME,
COLUMN_NAME,
OLD_VALUE,
NEW_VALUE,
ACTION,
UPDATED_BY,
UPDATED_DT
)
VALUES
(
i.table_name,
i.column_name,
-- :old.column_name,--- how to get old and new values?
-- :new.column_name,---
ACTION,
USER,
SYSDATE
);
end if;
end loop;
end;
【问题讨论】:
-
据我所知,这是一个关于使用动态 PL/SQL 获取 :old 和 :new 字段值的问题,我认为你做不到。
标签: oracle plsql oracle12c database-trigger