Oracle 数据库 Link + 内连接 + To_Number 查询

Oracle Database Link + Inner Join + To_Number Query

数据库 A - 表 A - 字段 A VARCHAR2
DatabaseB - TableB - FieldB NUMBER [dblink created]

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

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

有关字段的更多信息
字段 A: VARCHAR2(15), NOT NULL
样本值
-
123
没有非数字值,除了 -

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

我要做的是忽略 FieldA='-' OR 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. NULL 永远不会与 equals 匹配,因此您的连接已经解决了这一问题。
  2. 您会得到(可能)NUMBER 到 VARCHAR 的隐式类型转换,因此也应该注意这一点。

话虽如此,我非常支持不依赖隐式数据类型转换。所以我会把查询写成

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

如果这没有给出您想要的结果,也许在每个 table 中发布数据示例和您想要的结果会有所帮助。