2011-08-08 45 views
3

我有一個變量傳遞給我的存儲過程,它是一個過濾器(基本上)。但是,該字段有時可能爲空,如果是,我希望能夠將具有該字段的行檢查爲空。如何使null在oracle中爲null

例如,

表A:

VALUE_COLUMN | FILTER_COLUMN 
---------------------------- 
A   | (NULL) 
B   | (NULL)   
C   | (NULL) 
D   | (NULL) 
A   | 1 
E   | (NULL) 
F   | (NULL) 
B   | 1 

查詢(隨着輸入,VAL,過濾器):

SELECT COUNT(1) 
    FROM TableA 
WHERE 
    wrap_up_cd = val 
    AND brn_brand_id = filter 

預期I/O:

val = A, filter = (null) = 1 
val = A, filter = 1 = 1 
val = C, filter = 1 = 0 

我該如何讓Oracle表現這一點 辦法?

回答

8

如何:

SELECT COUNT(1) 
    FROM TableA 
WHERE 
    wrap_up_cd = val 
    AND ((brn_brand_id = filter) OR (brn_brand_id IS NULL AND filter IS NULL)) 

我不是一個Oracle的專家,但我希望的工作 - 基本使查詢比對,如果這兩個過濾器值是NULL。

+0

我編輯的SQL才能正常工作。但是,是的,這正是我所尋找的,我不知道爲什麼我沒有想到它。 – Malfist

+0

@Malfist:對不起,以前的語法是針對SQL Server的。顯示了多長時間,因爲我在任一平臺上完成了任何SQL ...... –

+0

我注意到,我也習慣於使用SQL Server,所有這些Oracle的東西都引發了我的循環。 – Malfist

2

Oracle沒有ISNULL函數。所以,你會需要像

SELECT COUNT(*) 
    FROM tableA 
WHERE brn_brand_id = filter 
    OR ( brn_brand_id IS NULL 
     AND filter IS NULL) 
0

這也可以很方便的時間:

SELECT COUNT(*) 
     FROM tableA 
    WHERE 
     NVL(brn_brand_id, CHR(0)) = NVL(filter, CHR(0)) 
相關問題