2012-08-16 34 views
1

我在想如果select語句中的where條件是否有可爲空的變量。它是否必須使用IF條件像下面那樣兩次編寫相同的select語句?有沒有更好的辦法?PL/SQL選擇條件有一個可爲空的變量

FUNCTION function1(
    foo IN INTEGER, 
) RETURN INTEGER 
    ret  INTEGER; 
    BEGIN 

IF foo IS NULL THEN 
    SELECT COUNT(*) INTO ret FROM t WHERE t.col IS NULL; 
ELSE 
    SELECT COUNT(*) INTO ret FROM t WHERE t.col = foo; 
END IF; 
RETURN ret; 

END function1; 

回答

2

你總是可以做

SELECT COUNT(*) 
    INTO ret 
    FROM t 
WHERE (t.col IS NULL AND foo IS NULL) 
    OR t.col = foo; 

這可以簡化爲

SELECT COUNT(*) 
    INTO ret 
    FROM t 
WHERE NVL(t.col, 'Some Impossible Value') = NVL(foo, 'Some Impossible Value'); 

雖然你可能需要在一個NVL(t.col, 'Some Impossible Value')基於函數的索引,使查詢高性能。