2012-08-16 2 views
1

select 문에서 where 조건에 nullable 변수가 있는지 궁금합니다. IF 조건을 사용하여 동일한 select 문을 아래처럼 두 번 작성해야합니까? 더 좋은 방법이 있습니까?PL/SQL select 조건에 nullable 변수가 있습니다.

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

당신은 항상 당신이 쿼리가 확대됨 할 NVL(t.col, 'Some Impossible Value')에 함수 기반 인덱스를해야 할 수도 있지만

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

로 단순화 할 수

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

을 할 수 있습니다.

관련 문제