аудит 50 столбцов с использованием оракула
Мне нужно создатьtrigger
вoracle 11g
для проверки таблицы.
У меня есть стол с50 columns
что должно бытьaudited
.
every new insert
into a table ,i need to put an entry in audit table (1 row)
.
For every update
,suppose i update 1st 2nd column
,then it will create two record in audit with its old value and new value
.
structure of audit table will be
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
В случаеinsert
только первичный ключ (основная таблица), т.е.id
а такжеcre_date and cre_time
должны быть населены иattribute
равно*
, в случае обновления, предположим, что colA и colB обновляются, тогда необходимо заполнить все. В этом случае будут созданы две записи с атрибутом первой записи.colA
и соответствующийold and new
значение, и то же самое дляcolB
Теперь мое решение для аудитаnot very optimized
я создалrow level trigger
, который проверит для каждой и каждых 50 столбцов для этой таблицы, была ли онаchanged
или не на основе егоnew and old value
(если -else), и он заполнит таблицу аудита.
Я не удовлетворен своим решением, поэтому я публикую здесь.
Другое решение, которое я видел в ссылке ниже:
http://stackoverflow.com/questions/1421645/oracle-excluding-updates-of-one-column-for-firing-a-trigger
Это не работает в моем случае, я сделал POC для этого, как показано ниже:
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;
В случае обновления он вызывает остальную часть, я не знаю почему.
Может ли это быть возможно черезcompound trigger