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

2021-08-30 19:42:42 字數 495 閱讀 4184

在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 ...