[英]NULL handling enhancement in PL/SQL query
當我們在S1_WFD_OPERATION_CODE
變量中傳遞一些值時,以下查詢沒有列出在WFD_DETECTION_EPA
中包含null
值的所有記錄。 結果中僅顯示WFD_DETECTION_EPA
不是null
的記錄。
如何增強此查詢?
AND UPPER (FD.WFD_DETECTION_EPA) LIKE
'%'
|| CASE
WHEN LENGTH (S0_WFD_DETECTION_EPA) > 0
THEN
UPPER (S0_WFD_DETECTION_EPA)
ELSE
'%'
END
|| '%'
AND UPPER (FD.WFD_OPERATION_CODE) LIKE
'%'
|| CASE
WHEN LENGTH (S1_WFD_OPERATION_CODE) > 0
THEN
UPPER (S1_WFD_OPERATION_CODE)
ELSE
'%'
END
|| '%'
您可以將條件與 OR 結合使用
AND (UPPER (FD.WFD_DETECTION_EPA) LIKE
'%'
|| CASE
WHEN LENGTH (S0_WFD_DETECTION_EPA) > 0
THEN
UPPER (S0_WFD_DETECTION_EPA)
ELSE
'%'
END
|| '%' OR FD.WFD_DETECTION_EPA IS NULL) -- this
AND UPPER (FD.WFD_OPERATION_CODE) LIKE
'%'
|| CASE
WHEN LENGTH (S1_WFD_OPERATION_CODE) > 0
THEN
UPPER (S1_WFD_OPERATION_CODE)
ELSE
'%'
END
|| '%'
干杯!!
你的邏輯比必要的復雜。 雖然默認情況下 Oracle 將空字符串和NULL
視為相同,但字符串連接忽略NULL
值。 所以你可以使用:
(UPPER(FD.WFD_DETECTION_EPA) LIKE '%' || UPPER(S0_WFD_DETECTION_EPA) || '%' OR
FD.WFD_DETECTION_EPA IS NULL
) AND
(UPPER(FD.WFD_OPERATION_CODE) LIKE '%' || UPPER(S1_WFD_OPERATION_CODE) || '%'
)
也就是說, CASE
表達式是不必要的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.