如何正确地建立公共同义词

Joe*_*Joe 10 oracle database-administration

这是一个非常愚蠢的,但我需要帮助.

我有一张由mydbowner拥有的桌子.它被命名为mydbowner.mytable.我试图通过发出命令来创建一个公共同义词:

为mydbowner.mytable创建或替换PUBLIC SYNONYM mytable;

当我这样做,我查询表得到:

ORA-01775:同义词的循环链

如何在没有问题的情况下创建此同义词.

Mar*_*bak 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
Run Code Online (Sandbox Code Playgroud)

我认为正在发生的事情是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
Run Code Online (Sandbox Code Playgroud)

是的,我意识到这并不是真的有意义,因为,一旦公共同义词解析为mbobak.mytable,并且没有找到,在我看来,它应该返回错误ORA-942"表或视图不存在"这对我来说更有意义.

但是,这似乎是它的工作原理.

QED

希望有所帮助.


Jus*_*ave 7

你得到的错误暗示mydbowner.mytable不是,实际上是一个表.是什么

SELECT object_type
  FROM all_objects
 WHERE owner = 'MYDBOWNER'
   AND object_name = 'MYTABLE'
Run Code Online (Sandbox Code Playgroud)

返回?