触发器内部我试图遍历表上的所有列,并将新值与旧值进行比较。以下是我迄今为止:Oracle PL/SQL:动态循环触发器列
CREATE OR REPLACE TRIGGER "JOSH".TEST#UPD BEFORE
UPDATE ON "JOSH"."TEST_TRIGGER_TABLE" REFERENCING OLD AS OLD NEW AS NEW FOR EACH ROW
declare
oldval varchar(2000);
newval varchar(2000);
begin
for row in (SELECT column_name from user_tab_columns where table_name='TEST_TRIGGER_TABLE') loop
execute immediate 'select :old.'||row.column_name||' from dual' into oldval;
execute immediate 'select :new.'||row.column_name||' from dual' into newval;
--Do something here with the old and new values
end loop;
end;
触发编译,但是当触发火灾,我越来越:
ORA-01008:并非所有变量绑定
在第一次立即执行,因为它的值为:old。 :old和:new已被定义为触发器的一部分,但看起来立即执行不能看到这些变量。
是否有办法动态地迭代触发器中的列值?
+1
只有在指定触发器为FOR EACH ROW时,才能使用旧的和新的关键字。 –
2009-04-24 17:02:21
+0
正确的是“FOR EACH ROW”。问题是我试图在动态sql语句中引用它们。 –
2009-04-24 17:04:09