2017-05-26 95 views
0

執行沒有模式限定符的地址對象的語句時,Oracle將首先在本地模式中查找對象,並且只有在找不到公共同義詞的對象時纔會找到該對象。Oracle:私有和公共同義詞

比如我創建了兩個(02)同義詞:

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

我喜歡登錄人力資源和我執行下面的語句。

select * from emp; 

如何引用公有同義詞,如果它具有相同的名稱,如私人同義詞?

回答

1

不,Oracle將在對象解析期間查找公共同義詞之前選擇本地同義詞。您不能將對象範圍略過,只能解析爲公共同義詞。

Object resolution docs

+0

好但在我的情況下,我想指的是公共同義詞。我該怎麼做。 – Steve

+0

@Steve你不能 – miracle173

+0

@Steve:但加里·邁爾斯說,你可以:https://stackoverflow.com/a/44233916/754550 – miracle173

0

我們不能引用的代名詞明確。 Oracle根據名稱解析規則的固定範圍解釋emp

所以,你有兩個選擇:

  1. 硬代碼的架構名稱:

    Select * from oe.employees;

  2. 再創建一個私有同義詞:

    Create synonym not_my_emp for oe.employees;

這些都不是理想的,但問題的原因是最初的決定是擁有一個覆蓋公有同義詞的私有同義詞。

0

嘗試

select * from "PUBLIC".EMP 

同義詞的所有者是公開的,但是這是在各種情況下的保留字。雙引號是一種解決方法。

+0

你試過這個嗎? – miracle173

+0

它在12.1環境中工作。不瞭解舊版本或12c容器/可插入環境。 –

+0

我試過了,並且獲得了以下消息: desc「PUBLIC」.EMP 錯誤: ORA-04043:對象「OE」。「ORDERS」不存在 – Steve