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
.
every 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