觸發器內部我試圖遍歷表上的所有列,並將新值與舊值進行比較。以下是我迄今爲止: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
已被定義爲觸發器的一部分,但看起來立即執行不能看到這些變量。
是否有辦法動態地迭代觸發器中的列值?
只有在指定觸發器爲FOR EACH ROW時,才能使用舊的和新的關鍵字。 – Powerlord 2009-04-24 17:02:21
正確的是「FOR EACH ROW」。問題是我試圖在動態sql語句中引用它們。 – 2009-04-24 17:04:09