现在做一个基于DDL语句的触发器
拦截表的rename事件
可是每次从sys.dictionary_obj_name获取的表名都是rename前的名字,rename后的表名要怎么获取?
哪位达人知道???create or replace trigger tri_test_db
  after RENAME on DATABASE
Begininsert into GGBA03A
      (ggba03a010, ggba03a020, ggba03a030, ggba03a040, ggba03a050)
    values
      (sys.sysevent,
       sys.dictionary_obj_type,
       sys.dictionary_obj_name, --对象名
       sys.dictionary_obj_owner,
       (select sysdate from dual));End;

解决方案 »

  1.   

    从v$sqltext里面怎么获取,有什么可以关联起来?
    能给个详解吗?
      

  2.   

    OPER@tl> select * from test;       AAA
    ----------
             1OPER@tl> select * from test2;
    select * from test2
                  *
    第 1 行出现错误:
    ORA-00942: 表或视图不存在
    OPER@tl> create or replace trigger tr_test
      2  after alter on schema
      3  declare
      4  v_sql varchar2(40);
      5  begin
      6  select trim(substr(lower(sql_text),instr(lower(sql_text),'to')+2)) into v_sql
      7  from v$sqlarea
      8  where sql_id=(select sql_id from v$session
      9  where audsid=userenv('sessionid'));
     10  dbms_output.put_line('old_name:'||dictionary_obj_name);
     11  dbms_output.put_line('new_name:'||v_sql);
     12  end;
     13  /触发器已创建OPER@tl> alter table test rename to test2;
    old_name:TEST
    new_name:test2表已更改。OPER@tl> select * from test2;       AAA
    ----------
             1OPER@tl>