필자는 proc에 전달 된 매개 변수를 기반으로 Oracle 테이블에서 레코드를 검색하고 편집 할 수있는 웹 양식을 제공합니다. 여기에 내 데이터의 :오라클 nvl where 절에 이상한 결과가 표시됩니까?
CAE_SEC_ID SEC_CODE APPR_STATUS
1 ABC1 100
2 ABC2 100
3 ABC3 101
4 (null) 101
5 (null) 102
6 ABC4 103
그리고 여기 where 절입니다 :
매개 변수의 값이있는 경우에만 일치하는 레코드를 반환해야 매개 변수에 NVL을 사용select foo
from bar
where CAE_SEC_ID = NVL(p_cae_sec_id,CAE_SEC_ID)
and Upper(SEC_CODE) like '%' || Upper(NVL(p_sec_code,SEC_CODE)) || '%'
and APPR_STATUS = NVL(p_appr_status, APPR_STATUS)
, 모든 기록을 경우의 없음 매개 변수에는 값이 있습니다. 모든 꽤 표준 또는 그렇게 나는 생각했다. 그러나 매개 변수 값없이 검색을 수행하면 쿼리에서 null SEC_CODE 레코드가 반환되지 않습니다. 즉, 레코드 1, 2, 3 및 6 만 반환됩니다. 위의 where 절에 SEC_CODE 값이 null 인 레코드가 있어야합니까?
흥미로운 점은 왜 이것이 성능을 향상시키는 지 자세히 설명해 주시겠습니까? –