使用DBLink查询的奇怪行为

时间:2018-11-30 22:09:12

标签: sql oracle11g

这很难复制。

具有这种模式的查询

Question

此错误失败

index

在这里很奇怪,这种模式很好用:

SELECT * 
  FROM table1 t1
  LEFT
  JOIN table2@myLink t2
    ON t1.key_field = t2.key_field
  LEFT
  JOIN (SELECT a.*,
               3 dummyField
          FROM table3@myLink a
       ) t3
    ON T1.key_key = t3.key_Field
   AND t3.dummyfield = 
         ( SELECT 3
             FROM dual
         );

有什么想法吗?到底发生了什么事?

此外,我在不同的环境中将这些表放在相同的模式中,并且第一个查询在没有数据库链接的情况下运行而没有错误。

2 个答案:

答案 0 :(得分:0)

问题出现在最后一个条件,其中左侧操作数是列,而右侧操作数是外部联接查询的子查询:

AND t3.dummyfield = ( SELECT 3 FROM dual );

如果将此部分更改为:

WHERE t3.dummyfield =  ( SELECT 3 FROM dual );

您的问题将得到解决。

您的工作查询将是:

SELECT * 
FROM table1 t1
LEFT JOIN table2@myLink t2
  ON t1.key_field = t2.key_field
LEFT JOIN
  (SELECT a.*,3 dummyField
    FROM table3@myLink a) t3 
ON  T1.key_key = t3.key_Field
WHERE t3.dummyfield = ( SELECT 3
  FROM dual
);

PS:请注意,您的两个查询在第二个LEFT JOIN ON操作数上都有语法错误。 附注:请注意,您的第二个查询在JOIN (SELECT * FROM table2@myLink) t2

下无法正常运行

答案 1 :(得分:0)

以下内容摘自Oracle支持文档ID 2258768.1

我们不支持将列外部连接到子查询,因此ORA-1799是预期的行为。

但是当查询引用本地对象时,由于查询转换而导致错误地避免了ORA-1799。