db-link 查询的语法约束

本节介绍 db-link 查询的语法约束。
注:如果仅仅是简单使用,如 insert into local_table select * from 同源 dblink 表,则可以忽略本节的约束。当查询存在 db-link 表与本地表混用(例如 db-link 表 JOIN 本地表),或与非同源 db-link 表混用时,则需要遵守如下语法约束,否则查询会报语法错误。
注:同源 db-link 指 db-link 的名字相同,名字不同的 db-link 成为非同源 db-link。例如 t1@gc_link 和 t2@gc_link 被认为是同源 db-link 的两个表。t1@gc_link 和 x1@gc_link2,被认为是非同源 db-link 表,即使 gc_link 和gc_link2 在创建时,using 的是同一个数据源,由于其 db-link 名字不同,仍然认为是非同源的。
db-link 查询语法约束如下:

  1. db-link 表只能出现在顶层查询,或同源 dblink 的子查询中。出现在本地表的子查询中时,必须放在 relation 子查询中。
    例如:如下语句会报语法错误,因为 db-link 出现在本地表的子查询中时,
    必须用 relation 子查询包围。
    select * from t1 where exists (select 1 from t2@gc_link as t2 where
    t2.id = t1.id);
    该语句可以修改为如下形式,以保证符合语法规则:
    select * from t1 where exists (select 1 from (select 1 from
    t2@gc_link) as t2 where t2.id = t1.id);
  2. 同源的 db-link 表可以直接 JOIN。dblink 表禁止与 local table,relation subquery,非同源 dblink 表,产生直接 JOIN 关系。
    例如:t1@gc_link JOIN t2@gc_link 是允许的;但 t1@gc_link JOIN t2是不允许的,因为 db-link 表禁止与本地表直接 JOIN,可以改写 SQL 语句为如
    下形式:
    … (select * from t1@gc_link) t, t2 …
  3. db-link 表的子查询中,禁止出现本地表,非同源 dblink 表。
    例如:select * from t1@gc_link where exists (select 1 from t2);是不允许的,因为 db-link 表 t1@gc_link 的子查询中出现了本地表 t2。可以改写为如下形式:
    select * from (select * from t1@gc_link) t where exists (select 1 from t2);
  4. group by 或 order by 中的相关子查询,禁止出现 db-link 表。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值