在非系統用戶底下建觸發器時引用v$session記錄類型時出現問題
錯誤:「表和視圖不存在」 sql
可是在 pl/sql 中是能夠運行 select * from v$session 的 session
v$session是同義詞,v_$session是視圖 oracle
須要如下處理: 函數
可直接受權
sys : grant select on v_$session to youruser; 設計
說明: 對象
這是個很好的問題
一個普通用戶,具備了select any dictionary的權限後,就能夠訪問任何一個系統視圖,包括v$session,因爲dba角色包含了select any dictionary的權限,因此你的hospital用戶select * from v$session是沒問題的
可是你在PL/SQL中,要參照一個表rowtype或者在定義cursor的時候使用到某個表,那你得在這個表上有select權,儘管你的dba角色有select any table的權限,但因爲在9i中規定
在初始化參數O7_DICTIONARY_ACCESSIBILITY取缺省值(false)的狀況下,一個用戶即便有select any table的權限,卻仍是不能訪問sys對象的,除非
1 把O7_DICTIONARY_ACCESSIBILITY設置爲true,也就是偶說的作法
或者
2 直接把sys對象的select權授予給這個用戶,也就是biti所說的作法 it
在存儲對象中引用字典表(視圖)必須單獨受權
SQL> select synonym_name,table_name from dba_synonyms where synonym_name like '%SESSION%';
SYNONYM_NAME TABLE_NAME
------------------------------ ------------------------------
V$SESSION V_$SESSION
v$session是同義詞,v_$session是視圖 io
這個問題,本質上,是pl/sql程序的特色的問題
在 pl/sql程序設計一書中有講到,因爲 pl/sql 的編譯的一些特性,oracle 採起了 角色在 存儲過程、函數、包 等有名pl/sql 中 不起做用的策略,必須直接受權才生效,因此即便有dba角色在存儲過程當中也是無效的 編譯