總之,IN子句不支持綁定變量。它支持唯一的價值,在你使用的方式。你需要像IN (var1, var2)
明確指定。
不知道你,你已經使用綁定變量。一種解決方法是使用REFCURSOR
通過動態地形成查詢字符串。
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;
One of my other answer也有其他方式使用集合,對於更大的IN子句列表。
因爲在串後的QUERY_STRING一些語法問題將會像_IN''V1','V2'_ .. – 2014-09-25 19:56:26