sql >> Base de Datos >  >> RDS >> Oracle

Compruebe si el parámetro es NULL dentro de la cláusula WHERE

En lugar de evaluar el estado de los parámetros de su procedimiento en la declaración SQL misma, mueva esa evaluación al bloque PL/SQL contenedor para que se ejecute solo una vez antes de que se envíe la declaración SQL ideal. Por ejemplo:

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;

También he tenido cierto éxito ajustando sentencias SQL con un OR dividiendo la declaración en dos declaraciones mutuamente excluyentes 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;