Oracle
 sql >> Base de données >  >> RDS >> Oracle

Vérifier si le paramètre est NULL dans la clause WHERE

Au lieu d'évaluer l'état des paramètres de votre procédure dans l'instruction SQL elle-même, déplacez cette évaluation vers le bloc PL/SQL contenant afin qu'elle ne soit exécutée qu'une seule fois avant que l'instruction SQL idéale ne soit soumise. Par exemple :

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;

J'ai également réussi à ajuster les instructions SQL avec un OR en divisant l'instruction en deux instructions mutuellement exclusives avec un 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;