मेरा अनुमान है कि आपने vList आईडी को एक सीमित स्ट्रिंग में प्राप्त करने के लिए पहले कुछ कदम उठाए हैं (आप यह नहीं कहते कि vList कैसे पॉप्युलेट किया गया था)। एक प्रश्न के रूप में क्यों न रखें?
begin
...
select name
bulk collect into tNames
from t_user
where id in (select id from some_table where ...);
...
कई बार चलाते समय संदर्भ स्विचिंग दर्दनाक हो सकता है, लेकिन मेरे लिए सबसे बुरी बात यह है कि आप संख्याओं की सूची होने के लिए पैरामीटर इनपुट को आँख बंद करके स्वीकार कर रहे हैं, जब यह वास्तव में कुछ भी हो सकता है। यह (निर्दोष रूप से) '1,2,X' हो सकता है, और आपको एक रनटाइम त्रुटि "अमान्य संख्या" मिलेगी। या इससे भी बदतर, यह एक SQL इंजेक्शन हमला हो सकता है। सामान्य रूप से इसका बुरा अभ्यास (गतिशील sql का अपना स्थान है), लेकिन निश्चित रूप से यह नहीं कि आप इसका उपयोग कैसे कर रहे हैं।
कुछ इस तरह का प्रयास करें:
create or replace type t_num_tab as table of number;
create or replace procedure test_proc(i_list in t_num_tab) as
type t_name_tab is table of varchar2(100);
l_names t_name_tab;
begin
-- get names
select name
bulk collect into l_names
from user_table
where id in (select * from table(i_list));
-- do something with l_names
dbms_output.put_line('Name count: ' || l_names.count);
end;
यदि आपको संख्याओं की सूची से अधिक जटिल कुछ चाहिए तो आप एक वस्तु प्रकार बना सकते हैं।