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

questionAnswers(4)

yourAnswerToTheQuestion