如何在Oracle中使用DBlink的同义词?

Nit*_*ish 4 oracle dblink

我已经为dblink创建了一个同义词.

create synonym dblink2 for dblink1
Run Code Online (Sandbox Code Playgroud)

但是当我使用同义词而不是dblink查询任何内容时,我正在获取远程数据库未找到错误的连接描述.

SELECT * FROM DUAL@DBLINK2
Run Code Online (Sandbox Code Playgroud)

如何使用同义词进行查询?

编辑:我知道如果我使用dblink创建表的视图它将工作.但我的要求是上述问题.

Ger*_*cso 11

不幸的是,不支持为dblinks创建同义词.如果您阅读有关同义词文档,您会发现同义词的允许对象仅为:

使用CREATE SYNONYM语句创建同义词,它是表,视图,序列,过程,存储函数,包,物化视图,Java类架构对象,用户定义对象类型或其他同义词的替代名称.

您的第二个查询失败的原因是您创建的同义词无法正常运行.它在创建时未正确验证,您可以创建任何类型的错误同义词.要验证,只需测试以下语句:

create synonym dblink3 for no_object_with_this_name;
Run Code Online (Sandbox Code Playgroud)

您仍会得到这样的回复:

*Synonym DBLINK3 created.*
Run Code Online (Sandbox Code Playgroud)

但当然没有什么能通过这个同义词起作用.

  • 它并不是真正的“功能”,而不是设计决策。Oracle并没有在编译时真正验证同义词的创建。我想这是有道理的,因为即使成功创建它也会使它无效。想象一下,有一个通过dblink指向远程db中的表的同义词。然后,该表被删除。远程db没有简单的方法来阻止它,因此现有的同义词变得无效。这将是在访问时验证同义词的一个很好的理由。 (2认同)

Lal*_*r B 5

我认为为 dblink 本身创建同义词没有意义。理想情况下,您可以使用dblink远程表创建同义词

CREATE DATABASE LINK my_db_link CONNECT TO user IDENTIFIED BY passwd USING 'alias';
CREATE SYNONYM my_table FOR remote_table@my_db_link;
Run Code Online (Sandbox Code Playgroud)

现在,您可以使用同义词查询远程表

SELECT * FROM my_table;
Run Code Online (Sandbox Code Playgroud)