試圖在pl/sql過程中運行一些sql。Oracle的標識符myschema.mytable必須聲明爲'
從schema.view中選擇字段;
我得到一個編譯錯誤
錯誤(22,18):PLS-00201:標識符「schema.view」必須聲明爲
從錯誤中,似乎我的用戶無權訪問到桌上。我可以在查詢窗口中運行相同的語句。
是否有我需要授予的許可?
謝謝!
試圖在pl/sql過程中運行一些sql。Oracle的標識符myschema.mytable必須聲明爲'
從schema.view中選擇字段;
我得到一個編譯錯誤
錯誤(22,18):PLS-00201:標識符「schema.view」必須聲明爲
從錯誤中,似乎我的用戶無權訪問到桌上。我可以在查詢窗口中運行相同的語句。
是否有我需要授予的許可?
謝謝!
您需要授予在表/視圖上運行過程明確權限的用戶。通過角色授予它不起作用。
問候 ķ
是。在執行過程時,Oracle不考慮您具有角色成員身份的權限,因此擁有該過程的用戶很可能通過角色被授予了對schema.view的訪問權限。您需要明確將該對象的權限授予該過程的所有者。
非常感謝! – Sam 2009-06-09 20:03:35
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
感謝您的快速回答。 – Sam 2009-06-09 16:48:24