Oracle:私有和公共同义词

时间:2017-05-26 17:04:55

标签: oracle

当执行在没有模式限定符的情况下处理对象的语句时,Oracle将首先在本地模式中查找该对象,并且只有在找不到该对象时才会查找公共同义词。

例如,我创建了两个(02)同义词:

create public synonym emp for oe.employees;
create synonym emp for hr.employees;

我像HR一样记录,然后执行了以下声明。

select * from emp; 

如果公共同义词的名称与私有同义词相同,请参考公共同义词?

3 个答案:

答案 0 :(得分:2)

不,Oracle会在查找对象解析期间的公共同义词之前选择本地同义词。您无法限制对象的范围,只能解析为公共同义词。

Object resolution docs

答案 1 :(得分:0)

我们无法明确引用同义词。 Oracle根据名称解析规则的固定范围解释emp

所以你有两个选择:

  1. 模式名称的硬编码:

    Select * from oe.employees;

  2. 创建另一个私有同义词:

    Create synonym not_my_emp for oe.employees;

  3. 这些都不是理想的,但问题的原因是最初决定使用私有同义词来覆盖公共同义词。

答案 2 :(得分:0)

尝试

select * from "PUBLIC".EMP

同义词的所有者是PUBLIC,但这是各种情况下的保留词。双引号是一种解决方法。