SQL文自体でプロシージャのパラメータ状態を評価する代わりに、その評価を含まれているPL / SQLブロックに移動して、理想的なSQL文が送信される前に1回だけ実行されるようにします。例:
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;
OR
を使用してSQLステートメントを調整することにもある程度成功しました。 UNION ALLを使用して、ステートメントを2つの相互に排他的なステートメントに分割します。
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;