トリガーの内部で、テーブルのすべての列をループして、新しい値を古い値と比較しようとしています。これが私がこれまでに持っているものです:
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
一部としてすでに定義されていますが、executeimmediateはこれらの変数を認識できないようです。
トリガーの列値を動的に反復する方法はありますか?