Oracle 在 object、view、synonyms和 public synonym 相同名稱 讀取順序的實驗
首先先創造測試用的table
SQL> create table test ( dest varchar2(20));
Table created.
SQL> create table test2 ( dest varchar2(20));
Table created.
並且insert into 值進去
SQL> insert into test values('test');
1 row created.
SQL> insert into test2 values('test2');
1 row created.
SQL> commit;
Commit complete.
然後建立 Synonym 出來 , Public Oracle才能允許建立相同名稱
SQL> create public synonym test for vincentyuan.test2;
Synonym created.
驗證開始
SQL> select * from test;
DEST
--------------------
test
SQL> drop table test;
Table dropped.
SQL> select * from test;
DEST
--------------------
test2
結論是:Oracle在user 的object 與 public synonym 名稱相同時,會先讀取時user 的object
要是user 沒有此名稱object時,才會讀取 public synonym。
以下是優先順序:
(1) 本用戶下是否存在 table 或 view
(2) 如果 table 或 view 不存在,則解析 synonym
(3) 如果 Private synonym 不存在,則查找同名的 public synonym 是否存在
(4) 如果同名的 public synonym 不存在,則返回00942錯誤
沒有留言:
張貼留言