由於儲存過程及觸發器引用ORACLE動態檢視v$session編譯不透過而執行時報錯ORA-04098
今天遇見一個很神奇的問題,ERP合同系統需要記錄登入oracle資料庫的使用者名稱、IP地址、登入時間、登入客戶端型別記錄資訊,需要建立個觸發器,
在觸發器中需要查詢v$session檢視,如下所示:
在觸發器中需要查詢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 ;
但是,這個儲存過程在編譯的時候報錯如下所示:
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編譯無法透過的觸發器就可以成功編譯了:
但是,該使用者在sqlplus中單獨執行涉及的v$session SQL語句是沒問題的,如下所示:
然而,出現這種問題的原因還是,使用者對動態檢視的查詢許可權不足造成的,處理方法如下:
然後,再編譯之前由於引用v$session編譯無法透過的觸發器就可以成功編譯了:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29357786/viewspace-1960977/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 儲存過程 檢視 觸發器 序列儲存過程觸發器
- oracle儲存過程和觸發器Oracle儲存過程觸發器
- 通過v$access檢視正在執行的儲存過程procedure儲存過程
- 破解儲存過程,函式,檢視,觸發器解密儲存過程函式觸發器解密
- oracle自動生成編譯所有函式、儲存過程、觸發器的語句Oracle編譯函式儲存過程觸發器
- /*動態執行儲存過程DEMO*/儲存過程
- 檢視錶,儲存過程,觸發器定義的方法儲存過程觸發器
- 檢視正在執行的儲存過程儲存過程
- 檢視錶、檢視、索引、儲存過程和觸發器的定義的方法索引儲存過程觸發器
- 瞭解使用mysql 的檢視、儲存過程、觸發器、函式....MySql儲存過程觸發器函式
- oracle 儲存過程重新編譯方法Oracle儲存過程編譯
- Oracle檢視錶、儲存過程、觸發器、函式等物件定義語句Oracle儲存過程觸發器函式物件
- oracle儲存過程(procedure)中執行動態SQL小記Oracle儲存過程SQL
- Oracle認證 :Oracle中重新編譯無效的儲存過程,或函式、觸發器Oracle編譯儲存過程函式觸發器
- 【Database】Oracle10g檢視正在執行的儲存過程DatabaseOracle儲存過程
- oracle 建立表,序列,索引,檢視,觸發器,函式,儲存過程,定時器,包體Oracle索引觸發器函式儲存過程定時器
- Entity Framework Code First執行SQL語句、檢視及儲存過程FrameworkSQL儲存過程
- 七、函式-儲存過程-觸發器函式儲存過程觸發器
- DBMS_PROFILER 檢視儲存過程執行時間儲存過程
- 動態儲存過程儲存過程
- oracle動態sql儲存過程示例OracleSQL儲存過程
- oracle儲存過程編譯死掉的原因及解決(zt)Oracle儲存過程編譯
- oracle 儲存過程執行報錯ORA-12828Oracle儲存過程
- Oracle 編譯儲存過程卡死解決方法Oracle編譯儲存過程
- 儲存過程編譯時卡死儲存過程編譯
- 2020重新出發,MySql基礎,MySql檢視&索引&儲存過程&觸發器MySql索引儲存過程觸發器
- Oracle儲存過程編譯卡死的解決方法Oracle儲存過程編譯
- oracle 執行普通方式及除錯debug方式儲存過程效能區別Oracle除錯儲存過程
- 儲存過程編譯時會卡死儲存過程編譯
- Oracle:建立JOB定時執行儲存過程Oracle儲存過程
- oracle 如何終止儲存過程的執行Oracle儲存過程
- MySQL--儲存過程與檢視MySql儲存過程
- mybatis呼叫檢視和儲存過程MyBatis儲存過程
- 動態呼叫儲存過程 sample:儲存過程
- SQL Server實戰五:儲存過程與觸發器SQLServer儲存過程觸發器
- 儲存過程中巢狀儲存過程的變數執行方式儲存過程巢狀變數
- 建立儲存過程編譯無效物件儲存過程編譯物件
- Oracle中用sql查詢獲取資料庫的所有觸發器,所有儲存過程,所有檢視,所有表...OracleSQL資料庫觸發器儲存過程