Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Verifique se o parâmetro é NULL dentro da cláusula WHERE


Em vez de avaliar o estado do parâmetro do seu procedimento na própria instrução SQL, mova essa avaliação para o bloco PL/SQL que o contém para que seja executado apenas uma vez antes que a instrução SQL ideal seja enviada. Por exemplo:
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;

Também tive algum sucesso no ajuste de instruções SQL com um OR dividindo a instrução em duas instruções mutuamente exclusivas com 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;