我有以下问题:
我已经为一个用户创建了一个同义词,以便从另一个模式调用过程,这是作为USER_1从all_synonyms表日志到sqlplus的输出:
OWNER SYNONYM_NAME TABLE_OWNER TABLE_NAME DB_LINK ORIGIN_CON_ID
~~~~~ ~~~~~~~~~~~~ ~~~~~~~~~~~ ~~~~~~~~~~ ~~~~~~~ ~~~~~~~~~~~~~
USER_1 SYN_NAME ADMIN PROCEDURE_NAME NULL 0但我无法仅使用同义词名称运行它。如果我这样做,我会得到一个OORA-06550。示例:
exec SYN_NAME;
OORA-06550: line 1, column 7: PLS-00201: identifier 'SYN_NAME' must be declared
exec USER_1.SYN_NAME; //works as expected我已经对USER_1运行了‘SYN_NAME上的授权执行’;
还有什么我需要设置的吗?我不确定我错过了什么。提前感谢您的帮助。
发布于 2016-07-28 17:31:08
如果您更改您的current_schema,您可以看到这一效果。如果它与您的用户匹配,那么它可以正常工作:
select user, sys_context( 'userenv', 'current_schema') as schema from dual;
USER SCHEMA
------------------------------ ------------------------------
USER_1 USER_1
create synonym syn_name for admin.procedure_name;
Synonym SYN_NAME created.
exec syn_name;
PL/SQL procedure successfully completed.但是如果我的会话有一个不同的current_schema,那么同义词必须以我的真实用户名作为前缀:
alter session set current_schema = user_2;
Session altered.
select user, sys_context( 'userenv', 'current_schema') as schema from dual;
USER SCHEMA
------------------------------ ------------------------------
USER_1 USER_2
select owner, synonym_name, table_owner, table_name
from all_synonyms where synonym_name = 'SYN_NAME';
OWNER SYNONYM_NAME TABLE_OWNER TABLE_NAME
------------------------------ ------------------------------ ------------------------------ ------------------------------
USER_1 SYN_NAME ADMIN PROCEDURE_NAME
exec syn_name;
ORA-06550: line 1, column 7:
PLS-00201: identifier 'SYN_NAME' must be declared
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
exec user_1.syn_name;
PL/SQL procedure successfully completed.您可能不知道您正在更改当前的模式;它可能发生在登录触发器中,可能是为了避免使用同义词。您可以使用以下命令检查当前架构:
select sys_context( 'userenv', 'current_schema') as schema from dual;如果实际显示的是ADMIN,则根本不需要同义词,只需直接调用PROCEDURE_NAME,而必须在其前面加上ADMIN模式名称。
发布于 2016-07-28 16:21:22
如果我没看错的话,这个过程存在于schema admin中,您希望user_1能够调用它。
作为管理员用户:
grant execute on <procedure_name> to user_1;作为user_1:
create synonym <procedure_name> for admin.<procedure_name>;https://stackoverflow.com/questions/38630442
复制相似问题