Oracle存儲過程跨用戶執行查詢報錯


Oracle中,在USERA下編寫一個存儲過程,該存儲過程中引用了另一個用戶USERB下的表或視圖對象。編譯該存儲過程,出現編譯錯誤。報ORA-00942: table or view does not exist。

但是該表或視圖的確在USERB下存在,而且已經授予了USERA DBA角色的權限,即可以查詢任何用戶下的表或視圖。將存儲過程中的該報錯語句復制粘貼到SQL窗口中執行,不報錯。為什么放在存儲過程中會報上述錯誤呢?

經過研究,發現ORACLE對於在存儲過程中引用其他用戶下的表或視圖對象有特別的限制,要求USERA對這個表或視圖具有直接的SELECT權限,而不是通過角色,如DBA間接獲取的權限。否則就會報上述錯誤導致編譯不通過。

解決該問題的方法如下: 
1.登錄到USERB用戶下。 
2.GRANT SELECT ON 表名(或視圖名) TO USERA 
3.重新登錄到USERA用戶下。 
4.重新編譯存儲過程,發現編譯通過。問題解決。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM