在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.重新編譯儲存過程,發現編譯通過。問題解決。
Oracle儲存過程跨使用者執行查詢報錯
在oracle 中,在usera下編寫乙個儲存過程,該儲存過程中引用了另乙個使用者userb下的表或檢視物件。編譯該儲存過程,出現編譯錯誤。報ora 00942 table or view does not exist。但是該錶或檢視的確在userb下存在,而且已經授予了usera dba角色的許可...
Oracle儲存過程執行許可權
預設情況下,在呼叫儲存過程使用者的角色是不起作用的,即在執行儲存過程時只有public許可權。所以如果被呼叫的儲存過程中如果有execute immediate create table.語句,將會引發ora 01031 insufficient privileges錯誤。儲存過程分為兩種,即dr ...
ORACLE 定時執行儲存過程
推薦用dbms scheduler方式更好 2012 11 19注 查詢 select job,broken,what,interval,t.from user jobs t job job的唯一標識,自動生成的 broken 是否處於執行狀態,n 執行 y 停止 what 儲存過程名稱 next ...