क्या आपको वास्तव में अल्पविराम से अलग की गई सूची वापस करने की आवश्यकता है? संग्रह प्रकार घोषित करना आम तौर पर बेहतर होगा
CREATE TYPE num_table
AS TABLE OF NUMBER;
एक फ़ंक्शन घोषित करें जो इस संग्रह का एक उदाहरण देता है
CREATE OR REPLACE FUNCTION get_nums
RETURN num_table
IS
l_nums num_table := num_table();
BEGIN
for i in 1 .. 10
loop
l_nums.extend;
l_nums(i) := i*2;
end loop;
END;
और फिर उस संग्रह का उपयोग अपनी क्वेरी में करें
SELECT *
FROM users_table
WHERE user_id IN (SELECT * FROM TABLE( l_nums ));
डायनेमिक SQL का भी उपयोग करना संभव है (जो @Sebas प्रदर्शित करता है)। हालाँकि, इसका नकारात्मक पक्ष यह है कि प्रक्रिया के लिए प्रत्येक कॉल एक नया SQL कथन उत्पन्न करेगा जिसे निष्पादित करने से पहले फिर से पार्स करने की आवश्यकता होती है। यह लाइब्रेरी कैश पर भी दबाव डालता है जो Oracle को कई अन्य पुन:प्रयोज्य SQL कथनों को शुद्ध करने का कारण बन सकता है जो कई अन्य प्रदर्शन समस्याएं पैदा कर सकता है।