码迷,mamicode.com
首页 > 数据库 > 详细

oracle怎么捕获表上的DML语句(不包括select)语句)

时间:2019-07-01 14:08:59      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:过程   ext   必须   写日志   upd   select   cap   state   怎么   

可以采用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)语句)

标签:过程   ext   必须   写日志   upd   select   cap   state   怎么   

原文地址:https://www.cnblogs.com/fanweisheng/p/11113426.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!