auditando 50 colunas usando o trigger oracle

Eu preciso criar umtrigger emoracle 11g para auditar uma tabela.

Eu tenho uma mesa com50 columns que precisa seraudited.

Paraevery new insert em uma tabela, eu preciso colocar uma entrada emaudit table (1 row).Paraevery update , suponha que eu atualize1st 2nd column , então, criará dois registros em auditoria com seusold value and new value .

estrutura da tabela de auditoria será

 id        NOT NULL
 attribute NOT NULL
 OLD VALUE NOT NULL
 NEW VALUE NOT NULL
 cre_date  NOT NULL
 upd_date  NULL
 cre_time  NOT NULL
 upd_time  NULL

No caso deinsert , apenas a chave primária (tabela principal), ou seja,id ecre_date and cre_time precisa ser preenchido eattribute igual a* , em caso de atualização, suponha que colA e colB está atualizando, então, todos precisam ser preenchidos. Nesse caso, dois registros serão criados com o atributo do primeiro registro.colA e correspondenteold and new valor, e mesmo para ocolB

Agora minha solução para auditoria énot very optimized eu criei umrow level trigger , que irá verificar para cada uma das 50 colunas para essa tabela se foichanged ou não com base em suanew and old value(if -else) e preencherá a tabela de auditoria. Eu não estou satisfeito com a minha solução, por isso estou postando aqui. Outra solução que vi no link abaixo:

http://stackoverflow.com/questions/1421645/oracle-excluding-updates-of-one-column-for-firing-a-trigger

Isso não está funcionando no meu caso, eu fiz um POC para isso, como mostrado abaixo:

create table temp12(id number);

create or replace trigger my_trigger
after update or insert on temp12
for each row
declare
  TYPE tab_col_nt IS table of varchar2(30);

  v_tab_col_nt tab_col_nt;

begin
 v_tab_col_nt := tab_col_nt('id','name');

   for r in v_tab_col_nt.first..v_tab_col_nt.last
   loop
      if updating(r) then
         insert into data_table values(1,'i am updating'||r);
      else
      insert into data_table values(2,'i am inserting'||r);
      end if;
   end loop;

 end;

Em caso de atualização está chamando a parte else eu não sei porque. Isso pode ser possível através decompound trigger

questionAnswers(5)

yourAnswerToTheQuestion