2017-01-17 11 views
0

DatabaseA - TABLEA - FieldA VARCHAR2
DatabaseB - TableB - FieldB NUMBER [DBLink создал]Oracle Database Link + внутреннее соединение + to_number Query

SELECT * 
FROM [email protected] b 
INNER JOIN TableA a 
ON b.FieldB = a.FieldA 

Есть 2 осложнения.
1. FieldA - VARCHAR2, но FieldB - NUMBER.
2. FieldA содержит - и FieldB содержит 0.

Более подробную информацию о полях
FieldA: VARCHAR2(15), NOT NULL
проба не дорожит
-
Нет, не числовые значения, кроме -

FieldB: NUMBER(5,0)
Примеры значений
0 настроить
Нет нечисловых значений

То, что я пытаюсь сделать, это игнорировать строки, если FieldA = '-' OR FieldB = 0, в противном случае сравнение FieldA с FieldB.

SELECT * 
FROM [email protected] b 
JOIN TableA a 
    ON to_char(b.FieldB) = a.FieldA 

Я получаю следующее сообщение об ошибке:

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

Мне непонятно, что вы имеете в виду с значениями NULL. 'TO_NUMBER (NULL)' возвращает 'NULL', поэтому каким образом необходимость преобразования значений конфликтует с обработкой NULL? Возможно, это поможет, если вы предоставите образцы ввода, образец запроса, фактический результат и ожидаемый результат ... –

+0

Я хотел бы игнорировать значения NULL, удалить их из набора результатов. – wervdon

+0

Повторяя то, что вы написали в вопросе, не отвечает на мой конкретный вопрос и не дает требуемого общего разъяснения. Если по какой-то причине вы не можете или не будете предоставлять образец ввода, запрос, который вы пробовали, фактические результаты и то, как они отличаются от ожиданий ... тогда вам нужно найти другой способ сделать ваш запрос ясным. Повторение не так, если вы хотите моей помощи; но, возможно, кто-то другой - лучший читатель. –

ответ

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

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

SELECT * 
FROM [email protected] b 
JOIN TableA a 
    ON to_char(b.FieldB) = a.FieldA 

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

+0

Я представил более подробную информацию о данных в вопросе. – wervdon