2017-08-31 27 views
1

當我嘗試在存儲過程中使用表時出現此錯誤。 當我從表中選擇*時,我得到了結果。但是,當我把它放在存儲過程(與其他表連接)並編譯時,出現錯誤, 錯誤(269,17):PL/SQL:ORA-00942:表或視圖不存在ORA-00942:表或視圖不存在 - 甚至當表存在並且選擇查詢運行良好時出錯

任何爲什麼會發生這種想法?

+0

只能從該表中選擇在存儲過程中工作嗎? – Frank

+2

也許你只能通過授予**角色**訪問表格。您需要直接授予您的** schema **以在過程中使用該表。 –

回答

0

當您執行存儲過程中的內容時會發生什麼?你提到一個連接表 - 與表中的select *不一樣。您可能必須通過模式名稱完全限定表名。

select * from schema.table;

+0

我使用:select * from ALPS.CUST_LOOKUP_DTL,並且在join中我也這樣做,INNER JOIN ALPS.CUST_LOOKUP_DTL – Minu

1

要由另一個架構所擁有的存儲過程使用表從一個架構,程序的架構需要在表上直接批:

grant select on ALPS.CUST_LOOKUP_DTL to myschema; 

相關的政府補助的角色,該模式已經是足夠:

grant select on ALPS.CUST_LOOKUP_DTL to some_role; 
grant some_role to myschema; 

在這種情況下myschema可以從表中選擇,但其程序不能。

+0

一般概念是正確的。但是,Oracle過程可以通過定義者的權限(缺省值)或調用者的權限來定義。程序的所有者(模式)只與定義者的權利程序有關。如果程序的所有者擁有所有必要的權利並且程序仍然**不起作用,那通常表明該程序是用調用者的權限(調用程序的用戶)編寫的。 – mathguy

相關問題