최초 조회후와 그 이후 값이 달라지는 문제 0 1 1,241

by ㅇㄴㅇ [Oracle Admin] [2011.11.15 11:23:02]


BETWEEN 구문에 대해서 제대로 결과를 가져오지 못하는 현상이 있습니다.

A와 B 두테이블이 

SELECT *
FROM TABLE_A A, TABLE_B B
WHERE A.COL1 = B.COL1
AND      A.DATE BETWEEN B.FROM_DATE AND B.TO_DATE

문제는 기본적으로 나와야 하는 값은 100건이라고 가정했을때,
최초 하드파싱시에는 약 110건이 나오는 문제가 있습니다.
이후 재조회를 하면 정상적인 값인 100건으로 나옵니다.

-------------------------------------------------------------------------------------------------------------------------

A테이블의 DATE를 B테이블의 구간사이에 있는 데이터를 가져오는 부분입니다.
B테이블의 구간은 전부 채워진건 아니고 TO_DATE쪽에 간혹 NULL이 있을 수 있습니다.

예시를 들자면 다음과 같습니다.
[TABLE_A]
COL0    COL1    DATE
000000000001    99274897    20111001
000000000002 99274897    20101103
000000000003 99274897    20110808
000000000004 39204117    20101001
000000000005 99274897    20111201
000000000006 39204117    20090910

[TABLE_B]
COL1    COL2    COL3    FROM_DATE    TO_DATE
99274897 A0 5 20090901 20101031
99274897 A0 6 20101101 20110417
99274897 B3 2 20090301
99274897 B1 4 20090901
39204117    A0    5    20090901    20101031
39204117    A0    6    20101101    20110417
39204117    A1    7    20110418    99991231
39204117    B1    1    20010804    20090228
39204117    A0    3    20090301    20090831
39204117    B3    2    20090301    
39204117    B1    4    20090901    
....


결과를 보면 B테이블의 TO_DATE가 NULL인 데이터들이 같이 나오는것 같습니다.
하지만 재조회를 하면 사라지니 뭔가 오라클의 버그인것 같습니다.

이러한 유형의 버그를 보신적이 있으신가해서 글을 올려봅니다.

버전은 오라클 11.2.0.1.0 입니다. 
답변 부탁드릴게요.
by 이재현 [2011.11.15 12:33:00]
버그인듯하군요

-- TO_DATE가 널이어도 필요하다면.. FBI 아님 9999.12.31디폴트로
SELECT *
FROM TABLE_A A, TABLE_B B
WHERE A.COL1 = B.COL1
AND A.DATE BETWEEN B.FROM_DATE AND NAL( B.TO_DATE, '99991231' )

-- TO_DATE 널갑인게 필요하지않다면
SELECT *
FROM TABLE_A A, TABLE_B B
WHERE A.COL1 = B.COL1
AND A.DATE BETWEEN B.FROM_DATE AND B.TO_DATE
AND B.FROM_DATE IS NOT NULL
AND B.TO_DATE IS NOT NULL

버그 메타링크에서.. 확인하시는게 제일 빠릅니다.

없다면 제보 ㄱㄱ
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입