如何正确地制作公共同义词

Posted

技术标签:

【中文标题】如何正确地制作公共同义词【英文标题】:How to correctly make a public synonym 【发布时间】:2012-02-18 04:30:08 【问题描述】:

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

我有一张属于 mydbowner 的表。它被命名为 mydbowner.mytable。我试图通过发出命令来创建一个公共同义词:

为 mydbowner.mytable 创建或替换公共同义词 mytable;

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

ORA-01775:同义词循环链

如何在没有问题的情况下制作这个同义词。

【问题讨论】:

这两个答案都是正确的。我打错字了,同义词什么都没有。 【参考方案1】:

我认为贾斯汀是在正确的轨道上。我认为这实际上意味着 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 "table or view不存在”,这对我来说更有意义。

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

QED

希望对您有所帮助。

【讨论】:

【参考方案2】:

您得到的错误暗示mydbowner.mytable 实际上不是表格。是什么

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

返回?

【讨论】:

以上是关于如何正确地制作公共同义词的主要内容,如果未能解决你的问题,请参考以下文章

Elasticsearch:如何在 Elasticsearch 中正确使用同义词功能

Elasticsearch:如何在 Elasticsearch 中正确使用同义词功能

如何调试 ORA-01775:同义词循环链?

Oracle基础 12 对象 objects 同义词/序列/试图/索引

在同义词和基础表上访问权限

oracle 同义词