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;