auditando 50 columnas usando el disparador de oracle

Necesito crear untrigger enoracle 11g Para auditar una mesa.

Tengo una mesa con50 columns que necesita seraudited.

porevery new insert en una tabla, necesito poner una entrada enaudit table (1 row).porevery update Supongamos que actualizo1st 2nd column , entonces creará dos registros en auditoría con suold value and new value .

estructura de la tabla de auditoría 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

En caso deinsert , solo la clave primaria (tabla principal) es decir, la clave principalid ycre_date and cre_time necesita ser poblado yattribute igual a* , en caso de actualización, suponga que colA y colB se están actualizando, entonces todos deben completarse. En este caso, se crearán dos registros con el atributo del primer registrocolA y correspondienteold and new valor, y lo mismo para elcolB

Ahora mi solución para auditar esnot very optimized , he creado unrow level trigger , que verificará en cada una de las 50 columnas de esa tabla si ha sidochanged o no basado en sunew and old value(si -else), y llenará la tabla de auditoría. No estoy satisfecho con mi solución por eso estoy publicando aquí. Otra solución que he visto en el siguiente enlace:

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

Esto no está funcionando en mi caso, he hecho un POC para eso como se muestra a continuación:

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;

En el caso de la actualización está llamando a la otra parte, no sé por qué. ¿Puede esto ser posible a través decompound trigger