2015-06-23 12 views
0

我正在使用下面的查詢來實現此目的。在執行查詢來創建觸發器時,它的工作正常,但是當我在創建觸發器的表中插入某些內容時,它會引發錯誤。如何創建觸發器將所有在數據庫上運行的查詢存儲到表中?

create or replace trigger TESTTRIG 
    after insert 
     or update 
     or delete 
    on sourcetable 
    declare 
     v_text varchar2(1000); 
     v_mask varchar2(100); 
     cursor c1 
      is 
      select sql_text 
       from v$open_cursor 
       where sid = sys_context('USERENV','SID') 
       order by last_sql_active_time desc; 
    begin 
     v_mask := case 
        when inserting then 'INSERT +INTO +<TABLE_NAME>(|\()' 
        when updating then 'UPDATE +<TABLE_NAME> ' 
        else 'DELETE(+FROM)? +<TABLE_NAME>(|$)' 
        end; 
     open c1; 
     loop 
      fetch c1 
      into v_text; 
      exit when c1%notfound; 
      if regexp_like(v_text,v_mask,'i') 
      then 
       insert into targettable('TIME_EXEC','SQL_TEXT') values (SYSDATE,v_text); 
       exit; 
      end if; 
     end loop; 
     close c1; 
    end TESTTRIG; 
/. 

我得到一個ORA-04098插入任何東西到「sourcetable」table.Please幫助。

+0

ORA消息已清除:觸發器無法編譯/無效。修復觸發器,消息消失。 – jwenting

+0

你能告訴我什麼是觸發器的錯誤。我是一個觸發器的完全新手,並非常感謝您可以提供的任何幫助。 –

回答

相關問題