如何调用属于另一个用户的包
How to call a package which is belongs to a another user
我在架构中有一个包'PKG_PARTITION_MAINTENANCE:'SAB_OWN'
我向如下用户授予了执行权限:
GRANT EXECUTE ON PKG_PARTITION_MAINTENANCE TO SAB_READ_USER;
但是当用户尝试调用包时出现如下错误:
EXECUTE PKG_PARTITION_MAINTENANCE.ADD_TABLE_PARTITIONS('tbl_name');
错误:
[Error] Execution (3: 7): ORA-06550: line 1, column 7:
PLS-00201: identifier 'PKG_PARTITION_MAINTENANCE.ADD_TABLE_PARTITIONS' must be declared
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
我遗漏了什么,为什么用户 SAB_READ_USER 无法执行它?此包 运行 在 SAB_OWN 架构中很好。
如果对象不在您登录的模式中,您必须告诉 Oracle 该对象属于哪个模式:
EXECUTE SAB_OWN.PKG_PARTITION_MAINTENANCE.ADD_TABLE_PARTITIONS('tbl_name');
您也可以创建同义词:
create synonym PKG_PARTITION_MAINTENANCE for SAB_OWN.PKG_PARTITION_MAINTENANCE;
它就像一个指针,告诉 Oracle 去哪里寻找被调用的对象。
或者,您可以更改您的会话,使您 "looking" 所在的架构与您登录的架构不同:
alter session set current_schema = SAB_OWN;
最后两个选项应该允许您 运行 包而无需明确说明架构名称,但就个人而言,我不会推荐它们 - 我会明确说明架构名称,除非有这是行不通的好理由!
我在架构中有一个包'PKG_PARTITION_MAINTENANCE:'SAB_OWN' 我向如下用户授予了执行权限:
GRANT EXECUTE ON PKG_PARTITION_MAINTENANCE TO SAB_READ_USER;
但是当用户尝试调用包时出现如下错误:
EXECUTE PKG_PARTITION_MAINTENANCE.ADD_TABLE_PARTITIONS('tbl_name');
错误:
[Error] Execution (3: 7): ORA-06550: line 1, column 7:
PLS-00201: identifier 'PKG_PARTITION_MAINTENANCE.ADD_TABLE_PARTITIONS' must be declared
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
我遗漏了什么,为什么用户 SAB_READ_USER 无法执行它?此包 运行 在 SAB_OWN 架构中很好。
如果对象不在您登录的模式中,您必须告诉 Oracle 该对象属于哪个模式:
EXECUTE SAB_OWN.PKG_PARTITION_MAINTENANCE.ADD_TABLE_PARTITIONS('tbl_name');
您也可以创建同义词:
create synonym PKG_PARTITION_MAINTENANCE for SAB_OWN.PKG_PARTITION_MAINTENANCE;
它就像一个指针,告诉 Oracle 去哪里寻找被调用的对象。
或者,您可以更改您的会话,使您 "looking" 所在的架构与您登录的架构不同:
alter session set current_schema = SAB_OWN;
最后两个选项应该允许您 运行 包而无需明确说明架构名称,但就个人而言,我不会推荐它们 - 我会明确说明架构名称,除非有这是行不通的好理由!