Внутри триггера я пытаюсь перебрать все столбцы в таблице и сравнить новые значения со старыми значениями. Вот что у меня есть:
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
уже определены как часть триггера, но, по-видимому, немедленно выполнить не может увидеть эти переменные.
Есть ли способ динамически перебирать значения столбцов в триггере?