跨用户的Oracle PLS-00201程序错误

时间:2014-06-20 00:12:36

标签: oracle stored-procedures

我有一个内部应用程序和我们网站共享的oracle数据库。

我对oracle知之甚少所以会解释我对它的理解......

当登录(使用Oracle SQL Developer)作为APPUSER时,数据库有两个用户APPUSER和WEBUSER,您可以看到数据库中的所有表。以WEBUSER身份登录时除了几个程序之外什么都看不到,APPUSER看不到这些程序。

一个程序以:

开头
create or replace PROCEDURE "UPDATE_DETAIL" 
(v_ref IN APPUSER.DETAILS.REFERENCE%TYPE
,v_desc IN APPUSER.DETAILS.DESCRIPTION%TYPE
...

第2行有一个红色波浪形“PLS-00201:标识符APPUSER未声明”

我认为它有“APPUSER.TABLE.COLUMN”,因为WEBUSER无法直接访问表格。

我已经执行了GRANT ALL ON UPDATE_DETAIL TO APPUSER以WEBUSER身份登录,但是没有解决问题,WEBUSER是该程序的所有者,但没有在Grants列表中列出任何内容(我假设因为所有者只有权利是默认的吗?)

该过程的依赖项列表也是空的,但无法找到如何手动添加过程。

不确定还有什么可以尝试修复此错误。

感谢。

1 个答案:

答案 0 :(得分:0)

如果您想要WEBUSER所拥有的程序(并且我相信您的说明UPDATE_DETAILWEBUSER所有)来引用APPUSER所拥有的对象,那么需要对这些对象授予WEBUSER权限。例如,APPUSER

GRANT SELECT ON appuser.details
   TO webuser;

这假定WEBUSER只需SELECT表中的APPUSER.DETAILS。如果您的过程需要该表中的INSERTUPDATEDELETE数据,则需要在WEBUSER表上授予APPUSER.DETAILS其他权限。您需要为APPUSER用户需要引用的WEBUSER中的每个表格进行类似的授权。