尝试在pl / sql过程中运行一些sql。
从schema.view中选择字段;
我收到编译错误
错误(22,18):PLS-00201:必须声明标识符'schema.view'
从错误中,我的用户似乎无法访问该表。我可以在查询窗口中运行相同的语句。
我需要授予许可吗?
谢谢!
答案 0 :(得分:4)
您需要授予在表/视图上运行过程显式权限的用户。通过角色授予它是行不通的。
此致 ķ
答案 1 :(得分:2)
是。在执行过程时,Oracle不考虑您从角色成员身份获得的权限,因此拥有该过程的用户可能通过角色被授予对schema.view的访问权限。您需要将该对象的权限明确授予该过程的所有者。
答案 2 :(得分:1)
对于“通过存储过程中不可用的角色授予的权限”问题,PLS-00201异常对我来说似乎有点不寻常。正如Steve Broberg和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