oracle怎么捕获表上的DML语句(不包括select)语句)
Posted fanweisheng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle怎么捕获表上的DML语句(不包括select)语句)相关的知识,希望对你有一定的参考价值。
可以采用dml触发器,如
CREATE OR REPLACE TRIGGER tr_capt_sql
BEFORE DELETE OR INSERT OR UPDATE
ON manager.test
DECLARE
sql_text ora_name_list_t;
state_sql capt$sql.sql_text%TYPE;
BEGIN
FOR i IN 1..ora_sql_txt(sql_text) LOOP
state_sql := state_sql || sql_text(i);
END LOOP;
INSERT INTO capt$sql(login_user,capt_time,ip_address,audsid,owner,table_name,sql_text)
VALUES(ora_login_user,sysdate,sys_context(‘USERENV‘,‘IP_ADDRESS‘),
userenv(‘SESSIONID‘),‘MANAGER‘,‘TEST‘,state_sql);
EXCEPTION
WHEN OTHERS THEN
sp_write_log(‘Capture DML Exception:‘||SQLERRM);
END tr_capt_sql;
在创建以上触发器时要注意几点
1、必须创建一个capt$sql的表,用来记录ddl的记录
2、sp_write_log原本是一个写日志的过程,可以置换为自己的需要,如null跳过。
以上是关于oracle怎么捕获表上的DML语句(不包括select)语句)的主要内容,如果未能解决你的问题,请参考以下文章