当执行在没有模式限定符的情况下处理对象的语句时,Oracle将首先在本地模式中查找该对象,并且只有在找不到该对象时才会查找公共同义词。
例如,我创建了两个(02)同义词:
create public synonym emp for oe.employees;
create synonym emp for hr.employees;
我像HR一样记录,然后执行了以下声明。
select * from emp;
如果公共同义词的名称与私有同义词相同,请参考公共同义词?
答案 0 :(得分:2)
不,Oracle会在查找对象解析期间的公共同义词之前选择本地同义词。您无法限制对象的范围,只能解析为公共同义词。
答案 1 :(得分:0)
我们无法明确引用同义词。 Oracle根据名称解析规则的固定范围解释emp
。
所以你有两个选择:
模式名称的硬编码:
Select * from oe.employees;
创建另一个私有同义词:
Create synonym not_my_emp for oe.employees;
这些都不是理想的,但问题的原因是最初决定使用私有同义词来覆盖公共同义词。
答案 2 :(得分:0)
尝试
select * from "PUBLIC".EMP
同义词的所有者是PUBLIC,但这是各种情况下的保留词。双引号是一种解决方法。