oracle表变更记录脚本,oracle 监控表数据变更触发器(脚本生成)

-------------- 构造insert action脚本----------------

select 1,REPLACE( 'CREATE OR REPLACE TRIGGER TR_TB_TEST_LOG

AFTER INSERT OR UPDATE ON TB_TEST

FOR EACH ROW

DECLARE

LOG NUMBER(1)~~~~

BEGIN

if inserting  then

insert into tb_log(LOG_ID, OBJECT_NAME,KEY_VALUE, EMP_GCODE, EMP_NAME, ACTION_TYPE,UNDO_SQL,REDO_SQL)

values(SQ_LOG.NEXTVAL,''TB_TEST'',:new.PROVINCE_CODE,

:new.OP_EMP_GCODE,:new.OP_EMP_NAME, ''新增'',

''delete TB_TEST where PROVINCE_CODE = ''''''||:new.PROVINCE_CODE||'''''';'',

''insert into TB_TEST('||wm_concat(a.column_name)||')

values('||

wm_concat(decode(b.data_type,'VARCHAR2','''''''||','CHAR','''''''||',

'NUMBER','''||NVL(TO_CHAR(','DATE','TO_DATE(''''''||TO_CHAR(','')||':new.'

||a.column_name||

decode(b.data_type,'VARCHAR2','||''''''','CHAR','||''''''','NUMBER','),''NULL'')||''',

'DATE',',''YYYY-MM-DD HH24:MI:SS'')||'''''',''''YYYY-MM-DD HH24:MI:SS'''')',''))||');''

); else ','~~~~',';') sql_text

from user_col_comments a , (select * from user_tab_columns order by column_id) b

where a.table_name = b.table_name

and a.column_name = b.column_name

and a.table_name='TB_TEST'

union all

---构造update action脚本

select 2, replace('

select need_log into log from TB_COLUMNS where object_name=''TB_TEST'' and column_name='''||a.column_name||''' ~~~~

if nvl(:old.'||a.column_name||','||decode(b.data_type,'VARCHAR2',''' ''','CHAR',''' ''',

'NUMBER','-9999','DATE','SYSDATE',''' ''')||') <> nvl(:new.'||a.column_name||','||

decode(b.data_type,'VARCHAR2',''' ''','CHAR',''' ''',

'NUMBER','-9999','DATE','SYSDATE',''' ''')||') and log=1 then

insert into tb_log(LOG_ID, OBJECT_NAME,KEY_VALUE,COLUMN_NAME,

OLD_VALUE, NEW_VALUE, EMP_GCODE, EMP_NAME, ACTION_TYPE,UNDO_SQL, REDO_SQL)

values(SQ_LOG.NEXTVAL, ''TB_TEST'',:old.PROVINCE_CODE,'''||a.column_name||

''',:old.'||a.column_name||

',:new.'||a.column_name||',

:new.OP_EMP_GCODE,:new.OP_EMP_NAME,''修改'',

''update TB_TEST set '|| a.column_name

||' =

'||decode(b.data_type,'VARCHAR2','''''''||',

'CHAR','''''''||',

'NUMBER','''|| nvl(TO_CHAR(',

'DATE','TO_DATE(''''''||TO_CHAR(','''''''||')

||':old.'||a.column_name||

decode(b.data_type,'VARCHAR2','||''''''','CHAR','||''''''','NUMBER','),''null'')||''',

'DATE',',''YYYY-MM-DD HH24:MI:SS'')||'''''',''''YYYY-MM-DD HH24:MI:SS'''')','||''''''')||'

where PROVINCE_CODE=''''''||:new.PROVINCE_CODE' ||'||'''''''',

''update TB_TEST set '|| a.column_name

||' =

'||decode(b.data_type,'VARCHAR2','''''''||','CHAR','''''''||','NUMBER','''||nvl(TO_CHAR(',

'DATE','TO_DATE(''''''||TO_CHAR(','''''''||')

||':new.'||a.column_name||decode(b.data_type,'VARCHAR2','||''''''','CHAR','||''''''','NUMBER','),''null'')||''',

'DATE',',''YYYY-MM-DD HH24:MI:SS'')||'''''',''''YYYY-MM-DD HH24:MI:SS'''')','||''''''')||'

where PROVINCE_CODE=''''''||:old.PROVINCE_CODE' ||'||'''''''') ~~~~

end if;','~~~~',';') AS C1

from user_col_comments a , (select * from user_tab_columns order by column_id) b

where a.table_name = b.table_name

and a.column_name = b.column_name

and a.table_name='TB_TEST'

union all

SELECT 3, REPLACE( '  END IF~~~~

END~~~~ ','~~~~',';') FROM DUAL

order by 1 asc

--------------------替换TB_TEST 为所要监控的表名,执行以上脚本,将获得的脚本执行后将生成监控触发器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值