本文主要介绍了通用的数据变更日志记录表及触发器的自动生成脚本,大家可以根据自己实际的需要来自行定义。 declarev_sqlstr varchar2(4000);begin--创建slog日志表及触发器for i in (select tname, tcommentsfrom ad_tabwhere is_slog = 1) loopbeginexecute immediate 'drop table slog_' || i。
tname || ' purge';exceptionwhen others thennull;end;execute immediate 'create table slog_' || i。
tname ||' as select 1 log_id,sysdate logdt,'' '' action,lpad('' '',100) user_ip,lpad('' '',100) user_host, a。
* from ' ||i。tname || ' a';execute immediate 'comment on table slog_' || i。tname || ' is ''' || i。
tcomments || '_LOG''';--建触发器v_sqlstr := 'create or replace trigger trg_slog_' || substr(i。 tname, 1, 20) || ' after insert or update or delete on ' || i。
tname || 'for each row/************************************Created by xsb on 2006-02-05数据变更日志记录*************************************/declare v_action char
(1);beginif inserting thenv_action := ''i'';elsif updating thenv_action := ''u'';elsev_action := ''d'';end if;--插入或更新记录时if inserting or updating theninsert into slog_' || i。
tname || '(log_id, logdt, action, user_host, user_ip';for j in (select column_namefrom user_tab_colswhere table_name = i。
tnameorder by column_id) loop--表的列名v_sqlstr := v_sqlstr || ', ' || j。 column_name;end loop;v_sqlstr := v_sqlstr || ')values(seq_sys_log。
nextval, sysdate, v_action, sys_context(''userenv'',''host''), sys_context(''userenv'',''ip_address'')';for j in (select column_namefrom user_tab_colswhere table_name = i。
tnameorder by column_id) loop--表的列名v_sqlstr := v_sqlstr || ', :new。' || j。column_name;end loop;v_sqlstr := v_sqlstr || ');end if;--删除记录时if deleting theninsert into slog_' || i。
tname || '(log_id, logdt, action, user_host, user_ip';for j in (select column_namefrom user_tab_colswhere table_name = i。
tnameorder by column_id) loop--表的列名v_sqlstr := v_sqlstr || ', ' || j。 column_name;end loop;v_sqlstr := v_sqlstr || ')values(seq_sys_log。
nextval, sysdate, v_action, sys_context(''userenv'',''host''), sys_context(''userenv'',''ip_address'')';。
。