Tóm lại, mệnh đề IN không hỗ trợ các biến ràng buộc. Nó chỉ hỗ trợ cho giá trị, theo cách bạn đã sử dụng .. Bạn cần chỉ định nó như IN (var1, var2)
;
Nếu không biết bạn, bạn đã sử dụng các biến ràng buộc. Một giải pháp là sử dụng REFCURSOR
Bằng cách tạo chuỗi truy vấn động.
DECLARE
VAR1 VARCHAR2(500);
CUR1 SYs_REFCURSOR;
QUERY_STRING VARCHAR2(2000) := 'SELECT T.COL1 FROM TABLE1 T WHERE T.COL1 IN';
MYREC IS RECORD
(
COL1 VARCHAR(1000);
);
myrecord MYREC;
BEGIN
VAR1 := q'['V1','V2']';
QUERY_STRING:= QUERY_STRING||'('||VAR1||')';
OPEN CUR1 FOR QUERy_STRING;
LOOP
FETCH CUR1 INTO myrecord;
DBMS_OUTPUT.PUT_LINE(myrecord.COL1);
EXIT WHEN v_my_ref_cursor%NOTFOUND;
..
-- your processing
END LOOP;
CLOSE CUR1;
END;
Một trong những câu trả lời khác của tôi cũng có cách khác bằng cách sử dụng bộ sưu tập, cho danh sách mệnh đề IN lớn hơn.