Ссылка на базу данных Oracle + внутреннее соединение + запрос To_Number
База данных А - Таблица А - Поле А VARCHAR2
База данных B - Таблица B - Поле B NUMBER
[dblink создан]
SELECT *
FROM TableB@dblink b
INNER JOIN TableA a
ON b.FieldB = a.FieldA
Есть 2 осложнения.
1. FieldA - это VARCHAR2
но FieldB NUMBER
,
2. Поле А содержит -
и FieldB содержит 0
,
Подробнее о полях
Поле A: VARCHAR2(15)
, NOT NULL
Примерные значения
-
123
Нет нечисловых значений, кроме -
Поле B: 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 никогда не будут совпадать с равными, поэтому ваше объединение уже позаботится об этом.
- Вы получите неявное преобразование типов (вероятно) NUMBER в VARCHAR, поэтому об этом также следует позаботиться.
Сказав это, я большой сторонник того, чтобы не полагаться на неявные преобразования типов данных. Так что я бы написал свой запрос как
SELECT *
FROM TableB@dblink b
JOIN TableA a
ON to_char(b.FieldB) = a.FieldA
Если это не дает желаемых результатов, возможно, будет полезно опубликовать примеры данных в каждой таблице и желаемых результатов.