使用dblink从MDC服务器连接DPS服务器的报错求助
解决ORA-00907: missing right parenthesis错误及跨dblink查询问题
错误直接原因
你的SQL语句存在两个语法问题:
- 子查询
(select * from salary@XE.DPS.ID.ORACLE.COM;)末尾多了分号,这是触发ORA-00907错误的直接原因,Oracle不允许子查询内部携带分号。 - 你尝试的
(...)@XE.JKT.ID.ORACLE.COM嵌套dblink写法是错误的,Oracle不支持这种跨两层dblink的嵌套引用方式。
正确的跨dblink查询方案
鉴于你已配置MDC→JKT、JKT→DPS的dblink,从MDC查询DPS的salary表有两种可行方式:
方案1:在中间节点创建视图(推荐)
在JKT服务器上创建指向DPS的salary表的视图:
CREATE VIEW v_dps_salary AS SELECT * FROM salary@XE.DPS.ID.ORACLE.COM;
随后在MDC上通过JKT的dblink直接查询该视图:
SELECT * FROM v_dps_salary@XE.JKT.ID.ORACLE.COM;
方案2:使用链式dblink(Oracle 12c+支持)
如果你的Oracle版本是12c及以上,可直接在MDC使用链式dblink语法,无需嵌套:
SELECT * FROM salary@XE.DPS.ID.ORACLE.COM@XE.JKT.ID.ORACLE.COM;
语法逻辑是表名@目标dblink@中间dblink,即先通过JKT的dblink连接到JKT,再借助JKT上的DPS dblink访问目标表。
内容的提问来源于stack exchange,提问作者Chezar
相关产品推荐
相关产品推荐

