Istället för att utvärdera din procedurs parametertillstånd i själva SQL-satsen, flytta den utvärderingen till det innehållande PL/SQL-blocket så att det bara exekveras en gång innan den ideala SQL-satsen skickas. Till exempel:
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;
Jag har också haft viss framgång med att ställa in SQL-satser med en OR
genom att dela upp uttalandet i två ömsesidigt uteslutande uttalanden med en 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;