2012-01-24 40 views
8

這是一個非常愚蠢的,但我需要幫助。如何正確製作公共同義詞

我有一張由mydbowner擁有的表格。它被命名爲mydbowner.mytable。我嘗試通過發出以下命令來創建公共同義詞:

創建或替換公用同義詞mytable for mydbowner.mytable;

當我這樣做,我查詢我得到的表:

ORA-01775:同義詞

如何使這個同義詞的循環鏈,而不必問題。

+0

這兩個答案是正確的。我做了一些排字錯誤,而同義詞沒有提及。 – Joe

回答

12

我覺得賈斯汀走的是正確的道路。我認爲它實際上意味着mydbowner.mytable不存在。

下面是一個例子:

SQL> conn mbobak 
Enter password: 
Connected. 
SQL> drop table mytable; 
drop table mytable 
      * 
ERROR at line 1: 
ORA-00942: table or view does not exist 


SQL> create public synonym mytable for mbobak.mytable; 

Synonym created. 

SQL> select * from mytable; 
select * from mytable 
       * 
ERROR at line 1: 
ORA-01775: looping chain of synonyms 

我覺得發生了什麼事是,甲骨文試圖解決MYTABLE,存在mbobak模式沒有mytable的,所以,在公共查找它,找到它,並看到它指向mbobak.mytable。但是,mbobak.mytable不存在,所以它在PUBLIC中查找mytable,並且有循環。

而事實上,如果創建MYTABLE,錯誤消失:

SQL> create table mytable as select * from dual; 

Table created. 

SQL> select * from mytable; 

D 
- 
X 

1 row selected. 

SQL> drop table mytable; 

Table dropped. 

SQL> select * from mytable; 
select * from mytable 
       * 
ERROR at line 1: 
ORA-01775: looping chain of synonyms 

是的,我知道並沒有真正完全意義,因爲,一旦公共同義詞決心mbobak.mytable,並沒有找到,這在我看來,它應該返回一個錯誤ORA-942「表或視圖不存在」,這使我更有意義。

但是,這似乎是如何工作的。

QED

希望有所幫助。

6

你所得到的錯誤意味着mydbowner.mytable不是,實際上是一個表。什麼

SELECT object_type 
    FROM all_objects 
WHERE owner = 'MYDBOWNER' 
    AND object_name = 'MYTABLE' 

回報?