我有一个 Web 表单,允许用户根据传递给 proc 的参数搜索和编辑 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。上面的 where 子句不应该包含具有空 SEC_CODE 值的记录吗?