У меня есть веб-форма, которая позволяет пользователям искать и редактировать записи из таблицы Oracle на основе параметров, передаваемых в процесс. Вот мои данные:
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:
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)
Использование nvl для параметров должно возвращать только совпадающие записи, если какой-либо из параметров имеет значения, и все записи, если ни один из параметров не имеет значений. Все довольно стандартно или так я думал. Однако когда я выполняю поиск без каких-либо значений параметров, запрос не возвращает записи с нулевым SEC_CODE, то есть возвращаются только записи 1, 2, 3 и 6. Разве вышеприведенное предложение не должно включать записи с нулевыми значениями SEC_CODE?