簡體   English   中英

NULL PL/SQL 查詢處理增強

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM