यह एक SQL डेवलपर प्रतिबंध नहीं है, यह बस बाध्य चर कैसे काम करता है। आप प्रभावी ढंग से कर रहे हैं:
select count(*) from foo
where foo.id in ('1,2,3')
... जो वास्तव में in (to_number('1,2,3'))
. है , इसलिए त्रुटि। यह एक ही मान के लिए काम करेगा, दो मानों के लिए विषम परिणाम देगा यदि आपका दशमलव विभाजक अल्पविराम है, और किसी और चीज़ के लिए विफल रहता है।
आप बाइंड प्रॉम्प्ट पर एकाधिक मान दर्ज नहीं कर सकते हैं, या in()
. को एकाधिक मान प्रदान नहीं कर सकते हैं एक ही बंधन के साथ। आप <स्ट्राइक>धोखास्ट्राइक> कर सकते हैं हालांकि थोड़ा आविष्कारशील बनें। xmltable
फ़ंक्शन अल्पविराम से अलग की गई स्ट्रिंग को पंक्तियों में बदल देगा जिसमें प्रत्येक में एक मान होगा:
var ids varchar2(50);
exec :ids := '1,2,3';
select * from xmltable(:ids);
COLUMN_VALUE
------------
1
2
3
फिर आप इसे लुक-अप तालिका के रूप में उपयोग कर सकते हैं:
select count(*)
from xmltable(:ids) x
join foo f on f.id = to_number(x.column_value);
COUNT(*)
----------
3