Oracle PL / SQL: bucle sobre columnas de disparador dinámicamente
Dentro de un activador, estoy tratando de recorrer todas las columnas de una tabla y comparar los nuevos valores con los valores anteriores. Esto es lo que tengo hasta ahora:
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;
El disparador se compila, pero cuando se dispara, obtengo:
ORA-01008: no todas las variables enlazadas
en la primera ejecución inmediata porque espera un valor para:old
. :old
y:new
ya están definidos como parte del activador, pero parece que ejecutar inmediatamente no puede ver esas variables.
¿Hay alguna forma de iterar dinámicamente sobre los valores de la columna en un disparador?