情景如下:
我有一个命名空间XXX
,在其中创建了一些表和存储过程...
他们有一个命名空间YYY
,在其中创建了一些表...
他们授予XXX
访问他们的表的权限,因此当我使用XXX
连接打开SQL Developer时,我可以执行以下操作:
SELECT * FROM YYY.TableA
但是如果我试图从存储过程内运行完全相同的语句(无论是简单存储过程还是包),存储过程将无法编译。这种情况经常发生在许多存储过程中。我是否需要请求其他权限?像这样运行存储过程:
CREATE OR REPLACE PROCEDURE PRC_SOMESP(
) AS BEGIN
END PRC_SOMESP;
不访问 YYY 表的存储过程可以成功编译。
提前致谢。
在 Justin Cave 的回复后,我尝试向存储过程中添加“AUTHID CURRENT_USER”语句,但仍然收到“表或视图不存在”的结果。
CREATE OR REPLACE PROCEDURE PRC_PROC1( PARAMETERS... )
AUTHID CURRENT_USER
AS
MYVAR NUMBER;
BEGIN
STATEMENTS...
END PRC_PROC1;
CREATE OR REPLACE PACKAGE PKG_PROC2
AUTHID CURRENT_USER
AS
TYPE T_CURSOR IS REF CURSOR;
PROCEDURE PRC_PROC2( PARAMETERS... )
END PKG_PROC2
我需要检查其他什么吗?
PRC_SOMESP()
有权在YYY.TableA
上进行选择操作。 - Will Marcouiller