Ссылка на базу данных 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 ответ

Решение
  1. NULL никогда не будут совпадать с равными, поэтому ваше объединение уже позаботится об этом.
  2. Вы получите неявное преобразование типов (вероятно) NUMBER в VARCHAR, поэтому об этом также следует позаботиться.

Сказав это, я большой сторонник того, чтобы не полагаться на неявные преобразования типов данных. Так что я бы написал свой запрос как

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

Если это не дает желаемых результатов, возможно, будет полезно опубликовать примеры данных в каждой таблице и желаемых результатов.

Другие вопросы по тегам