संक्षेप में, IN क्लॉज बाइंड वेरिएबल्स का समर्थन नहीं करता है। यह केवल वैल्यू के लिए सपोर्ट करता है, जिस तरह से आपने इस्तेमाल किया था।;
आपको जाने बिना, आपने बाइंड वेरिएबल्स का उपयोग किया है। एक समाधान REFCURSOR
use का उपयोग करना है गतिशील रूप से एक क्वेरी स्ट्रिंग बनाकर।
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;
मेरे अन्य उत्तर में से एक बड़े IN क्लॉज सूची के लिए, संग्रह का उपयोग करने का दूसरा तरीका भी है।