必须声明Oracle'标识符myschema.mytable'

时间:2009-06-09 15:42:28

标签: oracle

尝试在pl / sql过程中运行一些sql。

从schema.view中选择字段;

我收到编译错误

错误(22,18):PLS-00201:必须声明标识符'schema.view'

从错误中,我的用户似乎无法访问该表。我可以在查询窗口中运行相同的语句。

我需要授予许可吗?

谢谢!

3 个答案:

答案 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