环境: oracle 10g r2 
用户通过某程序发一条SQL指令 insert into t1(XX,XX) values(XX,xx).... 
现在我在t1上建立了一个触发器trigger 
要求在该trigger内捕捉该SQL语句即,insert t1(XX,XX) values(XX,xx).... 另在oracle10gr2的版本的dml的trigger中,ora_sql_txt(sql_text)貌似已经不能用了。 
知道csdn的高人多,请救命啊,在线等。 

解决方案 »

  1.   

    是的,10g中只有系统触发器才能用ora_sql_txt.
    你可以从v$sqltext中取啊?SQL> create table test(aaa number,bbb number);表已创建。SQL> create table test2(aaa varchar2(4000));表已创建。SQL> create or replace trigger tr_get_dml
      2  after insert on test
      3  declare
      4  v_sid number;
      5  v_sql varchar2(4000);
      6  begin
      7  select sql_text into v_sql
      8  from v$sqlarea
      9  where sql_id=(select sql_id from v$session
     10  where audsid=userenv('sessionid'));
     11  insert into test2 values(v_sql);
     12  end;
     13  /触发器已创建SQL> select * from test;未选定行SQL> select * from test2;未选定行SQL> insert into test values(1,2);已创建 1 行。SQL> select * from test2;AAA
    -----------------------------insert into test values(1,2)SQL> commit;提交完成。SQL> select * from test2;AAA
    -----------------------------insert into test values(1,2)SQL>
      

  2.   

    别忘了给用户select any dictionary权限、。
      

  3.   

    ~~~~~~~~~~~~~~~~~~~~还有没有其它方法,这个方法要有查V$SQL这些表的权限,比较麻烦
      

  4.   

    有没有在SQL中触发器内捕捉语句