2017-01-17 8 views
0

DatabaseA 가입 FieldB NUMBER오라클 데이터베이스 링크 내부가 + TO_NUMBER 쿼리

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

2 개 합병증이 있습니다 [DBLINK는을 만들었]. FieldA는 VARCHAR2이지만 FieldB는 NUMBER이다.
2. FieldA는 -이고 FieldB는 0입니다.

필드
FieldA에 대한

더 많은 정보 : 샘플
값없는 NOT NULL
VARCHAR2(15), -를 제외하고,
123
어떤 숫자가 아닌 값을위한 -

FieldB : NUMBER(5,0)
샘플 값
0
123
어떤 숫자가 아닌 값없는

FieldA =이 경우 행을 무시하는 난 할 노력하고있어

'-'또는 FieldB = 0, 그렇지 않으면 FieldB에 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을 equals와 일치하지 않습니다 :

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

    나는 다음과 같은 오류가 발생합니다.

  2. NUMBER에서 VARCHAR 로의 암시 적 유형 변환이 발생하므로이 또한 처리해야합니다.

그렇다고해서 암시적인 데이터 유형 변환에 의존하지 않는 것이 좋습니다. 이 경우

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

아마도 각 테이블의 데이터와 당신이 도움이 될 것입니다 원하는 결과의 예를 게시, 원하는 결과를 제공하지 않는 한 그래서 난 내 쿼리를 작성합니다.

+0

질문의 데이터에 대한 자세한 내용을 제공했습니다. – wervdon