【发布时间】:2011-05-11 00:41:13
【问题描述】:
剧情是这样的……
我有一个命名空间XXX,我在其中创建了一些表和一些存储过程...
他们有一个命名空间YYY,他们在其中创建了一些表...
他们授予XXX 访问他们的表的权限,所以当我使用XXX 连接到 SQL Developer 时,我可以这样做:
SELECT * FROM YYY.TableA
但是,如果我尝试从存储过程(简单存储过程或包)内部运行相同的语句,则存储过程不会编译。很多sp都会遇到这种情况。还有其他我必须要求的许可吗???我是这样运行 sp 的:
CREATE OR REPLACE PROCEDURE PRC_SOMESP(
) AS BEGIN
END PRC_SOMESP;
不访问 YYY 表的过程编译得很好。
提前致谢。
在 Justin Cave 响应之后,我尝试将“AUTHID CURRENT_USER”语句添加到 sp,但得到相同的“表或视图不存在”结果:
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
我应该检查其他的吗???
【问题讨论】:
-
首先,您不会像您说的那样运行 SP,而是创建它们。其次,确保
PRC_SOMESP()拥有比YYY.TableA更合适的权限以从中进行选择。