Oracle PL / SQL: Colocar Dinamicamente Colunas de Disparo
Dentro de um gatilho, estou tentando fazer um loop sobre todas as colunas em uma tabela e comparar os novos valores aos antigos. Aqui está o que eu tenho até agora:
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;
O gatilho é compilado, mas quando o gatilho é acionado, estou recebendo:
ORA-01008: nem todas as variáveis vinculadas
na primeira execução imediata, porque espera um valor para:old
. :old
e:new
já estão definidos como parte do gatilho, mas parece que a execução imediata não pode ver essas variávei
xiste uma maneira de iterar dinamicamente sobre os valores da coluna em um gatilh