2015-07-20 75 views
0

你好我想添加條件在哪裏,所以這裏的參數客戶端Id爲其他然後「」,那麼它的值應該是在使用,但如果客戶端Id是=「」又在哪裏不應該applyed,甲骨文有條件的地方

我試圖用這個,但是這給了我空結果所有

DEFINE ClientId = '123'; 

: 
: 
WHERE (('&ClientId' <> '' AND Delivery.Client.CLNT_ID = 100038324) OR ('&ClientId' = '')) 
+0

我不太瞭解Oracle,但假設變量的用法是正確的,邏輯看起來很好。 –

+0

在Oracle中不是很'...''= NULL',所以爲什麼它不能正常工作......我現在正在編寫一個解決方案..;) – Ditto

回答

2

您需要檢查IS NULLIS NOT NULL。在甲骨文空字符串「」被認爲是一個NULL值的時間,anything = NULL是「假「..

試試這個:

drop table junk; 

    create table junk (client_id number); 

    insert into junk values (123); 
    insert into junk values (234); 

    commit; 

    define ClientID = '123'; 

    select * 
    from junk 
    where (('&ClientID' IS NOT NULL AND client_id = 234) 
     or ('&ClientID' IS NULL)) 
/

    CLIENT_ID 
    ---------- 
     234 


    define ClientID = ''; 

    select * 
    from junk 
    where (('&ClientID' IS NOT NULL AND client_id = 234) 
     or ('&ClientID' IS NULL)) 
/

    CLIENT_ID 
    ---------- 
     123 
     234 
+0

你也可以用NVL('&ClientID',client_id)或者其他的東西..但是,你必須小心索引..它可能容易混淆優化器;) – Ditto