捕获DML语句的tigger

上一篇 / 下一篇  2008-03-10 16:00:36 / 个人分类:oracle

在oracle9i上可以使用下面的trigger捕获DML语句:
create or replace trigger capt_sql 
  BEFORE DELETE OR INSERT OR UPDATE ON t1 FOR EACH ROW
declare 
  n        number;
  stmt     varchar2(4000);
  sql_text ora_name_list_t;
begin
  n := ora_sql_txt(sql_text);
  FOR i IN 1..n LOOP
   stmt := stmt || sql_text(i);
  END LOOP;
  insert into t_sql(USERNAME,CLIENT_IP,SQL_TEXT,TABLE_NAME,OWNER)
              values(user,sys_context('userenv','ip_address'),stmt,'T1','RAINY');
END;
/
注意:该方法在9207以上的版本中不再适用。
ORA_SQL_TXT is a "System defined event attribute" and is supposed to work only with "System triggers".
从9207开始,ORA_SQL_TXT返回的值是NULL,仅在系统事件触发器中才有效。

TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2009-01-09  
    123
45678910
11121314151617
18192021222324
25262728293031

数据统计

  • 访问量: 3575
  • 日志数: 68
  • 建立时间: 2007-12-19
  • 更新时间: 2009-01-09

RSS订阅

Open Toolbar