由於儲存過程及觸發器引用ORACLE動態檢視v$session編譯不透過而執行時報錯ORA-04098

清風艾艾發表於2015-12-25
    今天遇見一個很神奇的問題,ERP合同系統需要記錄登入oracle資料庫的使用者名稱、IP地址、登入時間、登入客戶端型別記錄資訊,需要建立個觸發器,
在觸發器中需要查詢v$session檢視,如下所示:
 create or replace trigger EPMFRAMEWORK.PRF_OP_LOG 
  before delete or update on EPMFRAMEWORK.PRF_PROJECT_INFO_T 
  for each row 
    begin
      insert into EPMFRAMEWORK.MID_PRF_TT_LOG
      select sid,
               username,
               program,
               machine,
               sys_context('userenv','ip_address') ,
               sysdate
               from v$session
     where audsid = userenv('sessionid');
end ;
但是,這個儲存過程在編譯的時候報錯如下所示:
具體定位到一個Oracle資料庫系統檢視v$session,如下所示:

但是,該使用者在sqlplus中單獨執行涉及的v$session SQL語句是沒問題的,如下所示:

然而,出現這種問題的原因還是,使用者對動態檢視的查詢許可權不足造成的,處理方法如下:

然後,再編譯之前由於引用v$session編譯無法透過的觸發器就可以成功編譯了:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29357786/viewspace-1960977/,如需轉載,請註明出處,否則將追究法律責任。

相關文章