我有一個Web表單,它允許用戶根據傳入進程的參數從Oracle表中搜索和編輯記錄。這是我的數據:Oracle nvl在哪裏顯示奇怪的結果?
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值的記錄嗎?
有趣的是,你能否詳細說明爲什麼會提高性能? – 2011-03-05 18:13:16