簡體   English   中英

如何在where子句中使用Oracle的解碼功能

[英]How to use Oracle's decode function in where clause

我有一個很少有過濾條件的查詢,其中一個是作為整數參數進入查詢的。 我只想在此整數> 0時使用此過濾器,因為它永遠不會為null,所以我不能使用NVL。 在這種情況下如何使用DECODE

SELECT (columns list)
        FROM 
        AGREEMENT A
        WHERE 
        A.ACCOUNT = 545 
        AND A.GRP_ID = NVL(?,A.GRP_ID)

參數? 我得到的是整數

您可以使用一個案例:

SELECT (columns list)
    FROM 
    AGREEMENT A
    WHERE 
    A.ACCOUNT = 545 
    AND A.GRP_ID = CASE ? WHEN 0 THEN A.GRP_ID ELSE ? END

盡管我認為解碼的可讀性較差,但解碼的工作方式與此類似。

SELECT (columns list)
    FROM 
    AGREEMENT A
    WHERE 
    A.ACCOUNT = 545 
    AND A.GRP_ID = DECODE(?, 0, A.GRP_ID, ?)

但是給定用例,將參數設置為NULL會更好一些。 畢竟,0是您要視為其他值的值,而NULL在語義上對於指定“無過濾器”更有意義。

不要使用decode() 它確實是非常老式的。 您可以使用case或僅輸入正確的邏輯,如下所示:

where a.account = 545 and
      (? = 0 or a.grp_id = ?)

當然,這需要兩次使用參數。 但是,這對於decode()也是必要的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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