[英]Oracle PLS-00201 error in procedure across users
我有一个由内部应用程序和我们的网站共享的oracle数据库。
我对oracle知之甚少,因此将解释我的理解方式。
该数据库具有两个用户APPUSER和WEBUSER(使用Oracle SQL Developer)作为APPUSER登录时,您可以看到数据库中的所有表。 以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 GRANT ALL ON UPDATE_DETAIL TO APPUSER
登录,但这不能解决问题,WEBUSER是该过程的所有者,但Grants列表中未列出任何内容(我想是因为所有者只具有权利默认?)
该过程的“依赖项”列表也为空,但是找不到如何手动向其添加一个。
不知道还有什么可以尝试解决此错误。
谢谢。
如果要让WEBUSER
拥有的WEBUSER
(并且从您的描述中相信UPDATE_DETAIL
由WEBUSER
拥有)来引用APPUSER
拥有的APPUSER
,则需要为这些对象授予WEBUSER
特权。 例如,以APPUSER
GRANT SELECT ON appuser.details
TO webuser;
这假定WEBUSER
只需要从APPUSER.DETAILS
表中进行SELECT
。 如果您的过程需要对该表中的INSERT
, UPDATE
或DELETE
数据进行操作,则需要为WEBUSER
授予APPUSER.DETAILS
表其他特权。 您需要为WEBUSER
用户需要引用的APPUSER
中的每个表进行类似的授予。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.