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.
- NULL 永远不会与 equals 匹配,因此您的连接已经解决了这一问题。
- 您会得到(可能)NUMBER 到 VARCHAR 的隐式类型转换,因此也应该注意这一点。
话虽如此,我非常支持不依赖隐式数据类型转换。所以我会把查询写成
SELECT *
FROM TableB@dblink b
JOIN TableA a
ON to_char(b.FieldB) = a.FieldA
如果这没有给出您想要的结果,也许在每个 table 中发布数据示例和您想要的结果会有所帮助。
数据库 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.
- NULL 永远不会与 equals 匹配,因此您的连接已经解决了这一问题。
- 您会得到(可能)NUMBER 到 VARCHAR 的隐式类型转换,因此也应该注意这一点。
话虽如此,我非常支持不依赖隐式数据类型转换。所以我会把查询写成
SELECT *
FROM TableB@dblink b
JOIN TableA a
ON to_char(b.FieldB) = a.FieldA
如果这没有给出您想要的结果,也许在每个 table 中发布数据示例和您想要的结果会有所帮助。