2016-07-28 65 views
0

我有以下问题:同义词不工作:USER.SYNONYM_NAME作品,但SYNONYM_NAME不

我已经为了从另一个调用模式的过程中创建的代名词用户,这是从all_synonyms输出作为USER_1的表登录到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_NAME'的SYN_NAME运行`grant execute;

还有什么我需要设置?我不确定我错过了什么。我在这里先向您的帮助表示感谢。

回答

1

你可以看到效果,如果你改变你的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模式名称的前缀它。

+0

让我测试一下Alex,我会尽快回复回复。 – user1129209

+0

感谢Alex,这个问题似乎是current_schema的价值。非常感谢你的帮助。 – user1129209

1

如果我正确读取该过程,则该过程存在于模式admin中,并且您希望user_1能够调用它。

作为管理员用户:

grant execute on <procedure_name> to user_1; 

由于USER_1:

create synonym <procedure_name> for admin.<procedure_name>; 
+0

嗨雷内, 对不起,我已经创建了你提到的同义词。这就是我分享all_synonyms表的输出的原因。正如你所看到的,表格中包含了你建议的同义词。我正在调试一个我没有构建的应用程序,所以为什么我想知道其他东西是否会触发错误。 – user1129209

相关问题