Oracle Database Link +内部联接+ To_Number查询

时间:2017-01-17 14:06:46

标签: oracle inner-join varchar2 database-link

DatabaseA - TableA - FieldA VARCHAR2
DatabaseB - TableB - FieldB NUMBER [ dblink created ]

SELECT *  
FROM TableB@dblink b  
INNER JOIN TableA a  
ON b.FieldB = a.FieldA  

有两种并发症 1. FieldA是VARCHAR2但FieldB是NUMBER 2. FieldA包含-,FieldB包含0

有关字段的更多信息
FieldA VARCHAR2(15)NOT NULL
样本值
-
123个
没有非数字值,但 -

除外

FieldB NUMBER(5,0)
样本值
0
123个
没有非数字值

我想要做的是忽略行如果FieldA =' - '或FieldB = 0,否则将FieldA与FieldB进行比较。

SELECT *  
FROM TableB@dblink b  
JOIN TableA a  
  ON to_char(b.FieldB) = a.FieldA  

我收到以下错误:

SQL Error: 17410, SQLState: 08000
No more data to read from socket. 

1 个答案:

答案 0 :(得分:1)

  1. NULL将永远不会与equals匹配,因此您的联接已经完成了这一点。
  2. 你会得到(可能)NUMBER到VARCHAR的隐式类型转换,所以也应该这样做。
  3. 话虽如此,我是不依赖隐式数据类型转换的主要支持者。所以我会把我的查询写成

    SELECT *  
    FROM TableB@dblink b  
    JOIN TableA a  
      ON to_char(b.FieldB) = a.FieldA  
    

    如果没有给出你想要的结果,也许在每个表中发布数据的例子以及你想要的结果会有所帮助。