2011-05-18 74 views
1

我用這個SELECT聲明:NVL在WHERE子句不返回記錄具有空值

SELECT 
ID 
,SUB_TYPE  
,SERVICE_ID 
,MENU_TYPE 
,MENU_DESCRIPTION 
    FROM MY_TABLE 
    WHERE SUB_TYPE  = NVL('' , SUB_TYPE)  
     AND SERVICE_ID = NVL('' , SERVICE_ID) 
     AND MENU_TYPE = NVL('' , MENU_TYPE)  

有空MENU_TYPE不返回該行,但我想這些記錄返回

在此先感謝

回答

1

NULL永遠不會等於NULL。而在Oracle中,''是NULL。

試試這個:

((:P_MENU_TYPE IS NULL AND MENU_TYPE IS NULL) OR MENU_TYPE = :P_MENU_TYPE) 

(我把綁定變量:P_MENU_TYPE,你不得不',因爲SQL將不會與意義「」)

如果你真正的意思是,MENU_TYPE必須如果該參數不爲空的參數相匹配,而當參數爲null,則簡單地可以是任何東西,包括空:

(:P_MENU_TYPE IS NULL OR MENU_TYPE = :P_MENU_TYPE) 
0

您是否在尋找行中,所有三個欄s是否爲空?如果是這樣,你想要:

WHERE SUB_TYPE is null 
AND SERVICE_ID is null 
AND MENU_TYPE in null 
相關問題