这是一个非常愚蠢的,但我需要帮助。
我有一张由mydbowner拥有的桌子。它被命名为mydbowner.mytable。我试图通过发出命令来创建一个公共同义词:
为mydbowner.mytable创建或替换PUBLIC SYNONYM mytable;
当我这样做时,我查询表格,我得到了:
ORA-01775:同义词的循环链
如何在没有问题的情况下制作此同义词。
答案 0 :(得分:14)
我认为贾斯汀走在正确的轨道上。我认为它实际上意味着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
我认为正在发生的事情是Oracle尝试解决mytable,mbobak架构中没有mytable,所以它在PUBLIC中找到它,它找到它,并看到它指向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
希望有所帮助。
答案 1 :(得分:7)
您获得的错误意味着mydbowner.mytable
实际上不是表格。什么
SELECT object_type
FROM all_objects
WHERE owner = 'MYDBOWNER'
AND object_name = 'MYTABLE'
返回?