다른 조건 다 빼고 그조건 하나만으로 테스트하신것 정말 맞죠?
일단 결과가 나와야 하는 것이 정상입니다.
결과가 안나온다면 버그입니다.
패치를 하시던지, 버전업을 하시던지 해야 하겠지만...
여의치 않다면 버그가 발생하지 않는 다른 방식으로 코드를 변경하셔야겟지요.
참고로 '' 은 Null 입니다.
WHERE a.jepum_size = NVL(:arg_jepum_size, a.jepum_size) -- Not Null 일때
WHERE a.jepum_size LIKE :arg_jepum_size||'%' -- 문자타입일때
-- 널과 상관 없이...
WHERE (:arg_jepum_size IS NULL OR a.jepum_size = :arg_jepum_size)
마농님....
제가 자꾸 이랫다 저랫다 햇던 이유가 있네요
제가 테스트를 하면서 실제 테이블 데이타로도 테스트 하다가...
WITH 구문으로도 테스트를 하다가 했거든요
어쨋든 똑같은 결과값이 나와야 되는거같은데 아닌가 봅니다.
-----실제 테이블 적용데이타 -----
- 쿼리 안나옵니다
- 실제로 JEPUM_SIZE 는 NULL 데이타는 없습니다.
-- 쿼리를 다음처럼 NVL처리하면 됩니다
JEPUM_SIZE = DECODE( NVL('','') ,NVL('',''), A.JEPUM_SIZE, '')
SELECT A.MA_ILJA,
A.MA_WGT,
A.MA_DANGA,
A.GONG_AMT,
A.JEPUM_SIZE,
LENGTH(A.JEPUM_SIZE)
FROM SMDHP.SM_MA A
WHERE A.JEPUM_SIZE = DECODE( '' ,'', A.JEPUM_SIZE, '')
-- WITH 절로 가공데이타 -----
- 쿼리결과가 나옵니다. (맨마지막 NULL 인것 빼고 2개의 ROW 가 질의결과 나옵니다.)
WITH A AS (
SELECT '1' JEPUM_SIZE , 1 COL1, 1 COL2 FROM DUAL UNION ALL
SELECT ' ' JEPUM_SIZE , 1 COL1, 2 COL2 FROM DUAL UNION ALL
SELECT NULL JEPUM_SIZE , 1 COL1, 3 COL2 FROM DUAL
)
SELECT A.JEPUM_SIZE , COL1, COL2 FROM A
WHERE A.JEPUM_SIZE = DECODE( '' ,'', A.JEPUM_SIZE, '')
====================================================================
똑같은 버전의 오라클인데...
두개의 질의(실제데이타 기준, WITH절 기준) 에서 ...
1번 질의(실제데이타) 에서 데이타가 안나오는것이 이해안되고
2번 질의는 또 데이타가 나오는거도 이상하네요
이거 해깔리네요
결론적으로 제가 궁금햇던 것은
1번
A.JEPUM_SIZE = DECODE(:ARG_JEPUM_SIZE , '', A.JEPUM_SIZE, :ARG_JEPUM_SIZE)
2번
A.JEPUM_SIZE = DECODE( '' , '', A.JEPUM_SIZE, :ARG_JEPUM_SIZE)
1번으로 쿼리해서 아규먼트를 넘기면 데이타 조회됨
2번으로 직접 아규먼트가 아닌 '' 로 직접 쿼리를 날리면 조회가 안됨.
요 두가지 차이 입니다.
오라클 옵티마이저( 맞나요?) 가 1번은 쿼리를 일단 받아들인 후 아규먼트를 받아들어셔 쿼리하니까 되고
2번은 옵티마이저가 바로 쿼리문 분석해서 이건 아니다 싶어서 걸러버리는 머 이런차인건지....
ㅡㅡ.