【发布时间】:2018-02-21 13:25:47
【问题描述】:
我想清理 SCHEMA_ADM 和 SCHEMA_DAT 表上的一些数据,但是,我的过程需要存储在 SCHEMA_DAT 上,并且将由 SCHEMA_APP 调用。我做了这样的程序:
create or replace PACKAGE BODY "PKG_CLEANING_THE_MESS"
AS
PROCEDURE PRC_DELETE_DATA (some variables...)
AS
TYPE fooTableType
IS TABLE OF FOO_TABLE.ID%TYPE; --TABLE ON SCHEMA_DAT. Works fine!
fooTable fooTableType;
TYPE xyzTableType
IS TABLE OF XYZ_TABLE.ID%TYPE; --TABLE ON SCHEMA_ADM. The problem is here!!!
xyzTable xyzTableType;
...
END PRC_DELETE_DATA;
...
END PKG_CLEANING_THE_MESS;
当我尝试编译时,给我
PLS-00201:必须声明标识符“XYZ_TABLE”。
我尝试了“SCHEMA_ADM”。“XYZ_TABLE”而不是“XYZ_TABLE”,但也没有用。 SCHEMA_DAT 对 SCHEMA_ADM 具有 SIUD 角色,对 XYZ_TABLE 具有 SYNONYM 角色,但在进行研究时我发现存储过程不能使用角色授予。但是我没有找到任何方法来授予 PROCEDURE 上的授权以无错误地编译并保证 SCHEMA_APP 也可以调用该过程。有什么帮助吗?谢谢!
编辑:我找到了 this similar question,4 年前问过,但没有确定的答案:/
【问题讨论】:
-
将权限直接授予过程所有者。使用私有同义词避免硬编码模式名称。
-
即使直接授予 SCHEMA_DAT,仍然会出现同样的错误。
-
我的错,我错误地直接授予 SCHEMA_DAT。当我做正确的事情时,它就会起作用!