:new和:old值在oracle触发器

时间:2020-07-21 11:19:11

标签: oracle plsql oracle12c database-trigger

我必须在单个审计表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;

1 个答案:

答案 0 :(得分:0)

称为:new和:old的变量(除非您决定在触发器的声明中重命名它们)是放置触发器的表的行类型的变量。因此,您使用:new。和:old。