我必须在单个审计表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;
答案 0 :(得分:0)
称为:new和:old的变量(除非您决定在触发器的声明中重命名它们)是放置触发器的表的行类型的变量。因此,您使用:new。