Monday, November 27, 2006

 

Create triggers for LOG tables

Create triggers to load LOG tables:
procedure LogCreateTriggers as
v_vred varchar2(4000);
v_ime varchar2(4000);
begin
-- Test statements here
for r in (select t.table_name
from user_tables t
order by t.table_name) loop
htp.p('create or replace trigger 'substr(r.table_name,1,26)'_gbu');
htp.p(' before update on 'r.table_name' ');
htp.p(' for each row');
htp.p('declare');
htp.p(' -- local variables here');
htp.p('begin');
htp.p(' -- Generated: 'to_char(sysdate,'dd.mm.yyyy hh:mi:ss')'.');
htp.p(' -- When you change trigger rename it with deleteing char "g" in trigger name.');
htp.p(' if 1=2');
for r1 in (select t.table_name,t.column_name,t.data_type
from user_tab_cols t
where t.table_name = r.table_name
order by t.column_id) loop
if r1.data_type = 'VARCHAR2' then
htp.p(' or nvl(:new.'r1.column_name','' '') <> nvl(:old.'r1.column_name','' '')');
elsif r1.data_type = 'NUMBER' then
htp.p(' or nvl(:new.'r1.column_name',-111111111111111111111) <> nvl(:old.'r1.column_name',
-111111111111111111111)');
elsif r1.data_type = 'DATE' then
htp.p(' or nvl(:new.'r1.column_name',to_date(''01011900'',''ddmmyyyy'')) <> nvl(:old.'r1.column_name',
to_date(''01011900'',''ddmmyyyy''))');
end if;
end loop;
htp.p(' then');
v_ime := '';
v_vred := '';
for rx in (
select ','column_name ime, ',:old.'column_name vred
from user_tab_cols
where table_name = r.table_name
order by column_id
) loop
v_ime := v_ime rx.ime;
v_vred := v_vred rx.vred;
end loop;
htp.p(' insert into log$'r.table_name);
htp.p(' ('substr(v_ime,2)',logczsp, logoper, logakcija)');
htp.p(' values');
htp.p(' ('substr(v_vred,2)',sysdate, :new.aoper, ''U'');');
htp.p(' end if;');
htp.p('end;');
htp.p('/');
end loop;
end;

Comments: Post a Comment



<< Home

This page is powered by Blogger. Isn't yours?