Thay vì đánh giá trạng thái tham số thủ tục của bạn trong chính câu lệnh SQL, hãy di chuyển điều kiện đó sang khối PL / SQL có chứa để nó chỉ được thực thi một lần trước khi câu lệnh SQL lý tưởng được gửi. Ví dụ:
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;
Tôi cũng đã thành công trong việc điều chỉnh các câu lệnh SQL bằng OR
bằng cách chia câu lệnh thành hai câu loại trừ lẫn nhau bằng 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;