Oracle
 sql >> Database >  >> RDS >> Oracle

Verificare se il parametro è NULL all'interno della clausola WHERE

Invece di valutare lo stato del parametro della procedura nell'istruzione SQL stessa, spostare tale valutazione nel blocco PL/SQL contenente in modo che venga eseguita solo una volta prima che venga inviata l'istruzione SQL ideale. Ad esempio:

CREATE OR REPLACE PROCEDURE my_sp (p_DrumNo VARCHAR2)
IS
BEGIN
    IF p_DrumNo IS NULL THEN
        SELECT ...
        INTO ... -- Assumed
        FROM ...
        WHERE my_column = p_DrumNo;
    ELSE
        SELECT ...
        INTO ... -- Assumed
        FROM ...
        WHERE ORDER_ID IN (SELECT ORDER_ID FROM ORDERDELIVERY);
    END;
END;

Ho anche avuto un certo successo nell'ottimizzazione delle istruzioni SQL con un OR suddividendo la dichiarazione in due affermazioni che si escludono a vicenda con UNION ALL:

SELECT ...
FROM ...
WHERE p_DrumNo IS NULL
AND ORDER_ID IN (SELECT ORDER_ID FROM ORDERDELIVERY)
UNION ALL
SELECT ...
FROM ...
WHERE p_DrumNo IS NOT NULL
AND my_column = p_DrumNo;