सीएसवी का उपयोग करना शायद सबसे आसान तरीका है, यह मानते हुए कि आप 100% निश्चित हो सकते हैं कि आपके तत्वों में स्वयं तार नहीं होंगे।
एक वैकल्पिक, और शायद अधिक मजबूत, ऐसा करने का तरीका स्ट्रिंग की तालिका के रूप में एक कस्टम प्रकार बनाना है। मान लीजिए कि आपके तार 100 वर्णों से अधिक लंबे नहीं थे, तो आप यह कर सकते थे:
CREATE TYPE string_table AS TABLE OF varchar2(100);
फिर आप इस प्रकार के एक चर को अपनी संग्रहीत प्रक्रिया में पास कर सकते हैं और इसे सीधे संदर्भित कर सकते हैं। आपके मामले में, कुछ इस तरह:
FUNCTION EXECUTE_UPDATE(
identifierList string_table,
value int)
RETURN int
IS
BEGIN
[...other stuff...]
update table1 set col1 = col1 - value
where id in (select column_value from table(identifierList));
RETURN SQL%ROWCOUNT;
END
table()
फ़ंक्शन आपके कस्टम प्रकार को एक एकल कॉलम "COLUMN_VALUE" के साथ एक तालिका में बदल देता है, जिसे आप फिर किसी अन्य तालिका की तरह मान सकते हैं (इसलिए शामिल हों या, इस मामले में, उप-चयन करें)।
इसकी खूबी यह है कि Oracle आपके लिए एक कंस्ट्रक्टर बनाएगा, इसलिए अपनी संग्रहीत प्रक्रिया को कॉल करते समय आप बस लिख सकते हैं:
execute_update(string_table('foo','bar','baz'), 32);
मुझे लगता है कि आप सी # से प्रोग्रामेटिक रूप से इस कमांड को बनाने का काम संभाल सकते हैं।
एक तरफ, मेरी कंपनी में हमारे पास स्ट्रिंग्स, डबल्स, इनट्स आदि की सूचियों के लिए मानक के रूप में परिभाषित कई कस्टम प्रकार हैं। हम इन प्रकारों से सीधे संबंधित जावा ऑब्जेक्ट्स में मैप करने में सक्षम होने के लिए Oracle JPublisher का भी उपयोग करते हैं। मैंने चारों ओर एक त्वरित नज़र डाली लेकिन मैं सी # के लिए कोई प्रत्यक्ष समकक्ष नहीं देख सका। बस मैंने सोचा कि अगर जावा देवता इस प्रश्न पर आते हैं तो मैं इसका उल्लेख करूंगा।