2014年1月19日 星期日

Oracle 在 object 和 public synonym 相同名稱時的讀取順序

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錯誤








沒有留言:

張貼留言