2009-06-09 96 views
1

試圖在pl/sql過程中運行一些sql。Oracle的標識符myschema.mytable必須聲明爲'

從schema.view中選擇字段;

我得到一個編譯錯誤

錯誤(22,18):PLS-00201:標識符「schema.view」必須聲明爲

從錯誤中,似乎我的用戶無權訪問到桌上。我可以在查詢窗口中運行相同的語句。

是否有我需要授予的許可?

謝謝!

回答

4

您需要授予在表/視圖上運行過程明確權限的用戶。通過角色授予它不起作用。

問候 ķ

+0

感謝您的快速回答。 – Sam 2009-06-09 16:48:24

2

是。在執行過程時,Oracle不考慮您具有角色成員身份的權限,因此擁有該過程的用戶很可能通過角色被授予了對schema.view的訪問權限。您需要明確將該對象的權限授予該過程的所有者。

+0

非常感謝! – Sam 2009-06-09 20:03:35

1

PLS-00201異常對我來說似乎有點不尋常,因爲「通過存儲過程中不可用的角色授予的權限」問題。正如史蒂夫布羅貝里和KHB已經指出,直接授予權限的用戶才能解決異常

ORA-00942: table or view does not exist. 

(這是例外,我通常看到編譯存儲過程時,當語句的工作存儲過程外,我發現特權是通過角色授予。)

什麼是種奇特的是,你所看到的例外是PLS-00201(那有我不解。)


另一個解決辦法的ORA-942「通過角色沒有特權」的問題是與調用權限定義過程,並使用動態SQL:

create procedure foo authid current_user 
is 
    ln_cnt number; 
begin 
    execute immediate 'select cnt(1) from schema.view' into ln_cnt; 
end; 
/

我不認爲這是最好的方法(它有自己的問題),但這是一種解決方法。

http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28370/dynamic.htm