Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 如何调用属于另一个用户的包_Oracle_Oracle11g_Database Administration_Database Partitioning - Fatal编程技术网

Oracle 如何调用属于另一个用户的包

Oracle 如何调用属于另一个用户的包,oracle,oracle11g,database-administration,database-partitioning,Oracle,Oracle11g,Database Administration,Database Partitioning,我有一个包'PKG_PARTITION_MAINTENANCE in Schema:'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):

我有一个包'PKG_PARTITION_MAINTENANCE in Schema:'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_用户无法执行它?此包在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在哪里查找被调用的对象

或者,您可以更改会话,以便“查看”的模式与您登录的模式不同:

alter session set current_schema = SAB_OWN;
最后两个选项应该允许您在不显式声明模式名称的情况下运行包,尽管就我个人而言,我不建议使用它们-我会显式声明模式名称,除非有很好的理由说明它不起作用