चुनें स्टेटमेंट के साथ बल्क कलेक्ट क्लॉज
PL/SQL बल्क कलेक्ट सीरीज़ के दूसरे ट्यूटोरियल में आपका स्वागत है, जहाँ हम सीखेंगे कि SELECT-INTO स्टेटमेंट के साथ BULK COLLECT क्लॉज़ का उपयोग कैसे करें।
प्रसंग स्विच अच्छे हैं लेकिन केवल तभी जब वे संख्या में कम हों। संदर्भ स्विच की बढ़ी हुई संख्या खराब क्वेरी प्रदर्शन जैसी समस्याएं पैदा कर सकती है। संदर्भ स्विच के कारण होने वाले इस ओवरहेड को आसानी से नियंत्रित किया जा सकता है यदि हम उन्हें संपीड़ित कर सकते हैं। इस ट्यूटोरियल में आप ठीक यही सीखेंगे।
आप SELECT-INTO के बारे में अधिक जान सकते हैं यहां .
सेलेक्ट-इनटू स्टेटमेंट के साथ हमें बल्क कलेक्ट का उपयोग कब करना चाहिए?
जब आप सुनिश्चित हों कि आपके SELECT स्टेटमेंट का रिटर्निंग परिणाम छोटा है तो आपको सेलेक्ट-इन स्टेटमेंट के साथ बल्क कलेक्ट क्लॉज का उपयोग करना चाहिए। अन्यथा आपका बल्क कलेक्ट क्लॉज आपके सिलेक्ट-इन स्टेटमेंट को मेमोरी हॉगिंग मॉन्स्टर बना देगा। नतीजतन यह आपके डेटाबेस के प्रदर्शन को धीमा कर देगा।
यदि मेरा चयन कथन बड़ी संख्या में पंक्तियों को प्राप्त कर रहा है, तो मुझे क्या करना चाहिए?
डेटाबेस से प्राप्त पंक्तियों की संख्या को सीमित करने के लिए आप हमेशा बल्क कलेक्ट के साथ LIMIT क्लॉज का उपयोग कर सकते हैं। लेकिन यह तभी संभव है जब हम PL/SQL कर्सर के साथ बल्क कलेक्ट क्लॉज का उपयोग कर रहे हों। बहरहाल, हम इसके बारे में अगले ट्यूटोरियल में विस्तार से चर्चा करेंगे।
हम SELECT-INTO स्टेटमेंट में बल्क कलेक्ट का उपयोग करके प्राप्त किए गए डेटा को सीमित क्यों नहीं कर सकते?
जब हम SELECT-INTO स्टेटमेंट के साथ बल्क कलेक्ट क्लॉज का उपयोग करते हैं तो यह अंतर्निहित . का उपयोग करता है कर्सर बल्क डेटा प्रोसेसिंग का कार्य करने के लिए। हालांकि लिमिट क्लॉज का उपयोग केवल बल्क कलेक्ट क्लॉज के साथ किया जा सकता है, जब बाद वाला स्पष्ट कर्सर का उपयोग कर रहा हो डेटा प्रोसेसिंग के लिए।
बल्क कलेक्ट क्लॉज कब इंप्लिक्ट कर्सर का उपयोग करता है और कब स्पष्ट कर्सर का उपयोग करता है?
यदि हम SQL स्टेटमेंट जैसे SELECT-INTO के साथ बल्क कलेक्ट क्लॉज का उपयोग कर रहे हैं तो यह एक निहित कर्सर का उपयोग करता है। दूसरी ओर जब भी हम FETCH स्टेटमेंट के साथ बल्क कलेक्ट क्लॉज का उपयोग करते हैं तो यह एक स्पष्ट कर्सर का उपयोग करता है।
मेरा सुझाव है कि आप पढ़ें एक स्पष्ट कर्सर कैसे बनाएं FETCH कथन के बारे में अधिक जानने के लिए।
क्या हम बल्क कलेक्ट क्लॉज द्वारा दिए गए परिणाम को आदिम डेटाटाइप के वेरिएबल में स्टोर कर सकते हैं?
नहीं, अभी तक Oracle डेटाबेस में बल्क कलेक्ट क्लॉज़ के साथ बल्क डेटा प्रोसेसिंग के लिए PL/SQL संग्रह एकमात्र सहायक डेटाटाइप हैं। यदि आप बल्क कलेक्ट क्लॉज का उपयोग करके पुनर्प्राप्त किए गए डेटा को डेटाटाइप के चर, संख्या या Varchar2 जैसे चर में संग्रहीत करने का प्रयास करते हैं, तो आपको एक त्रुटि मिलेगी जो कुछ इस तरह पढ़ेगी:
"PLS-00497:INTO सूची में एकल पंक्ति और बहु-पंक्ति (बल्क) के बीच मिश्रण नहीं कर सकता"
बयान में थोक संग्रह की परिभाषा
“बल्क कलेक्ट इनटू” स्टेटमेंट एक कॉलम से कई डेटा का चयन करता है और इसे SQL कलेक्शन में स्टोर करता है।
सेलेक्ट-इनटू स्टेटमेंट के साथ बल्क कलेक्ट क्लॉज का सिंटैक्स।
Oracle डेटाबेस में सेलेक्ट-इन स्टेटमेंट के साथ PL/SQL बल्क कलेक्ट क्लॉज का उपयोग करने के लिए सिंटैक्स निम्नानुसार है:
SELECT column_list BULK COLLECT INTO collection_datatype_name FROM table_name WHERE <where clause> ORDER BY <column list>;
कहां:
कॉलम सूची उन स्तंभों की सूची है जिनसे आप डेटा पुनर्प्राप्त करना चाहते हैं।
संग्रह डेटा प्रकार का नाम संग्रह चर का नाम होगा जो थोक संग्रह खंड द्वारा लौटाए गए डेटा को रखेगा।
इसके अलावा हमेशा याद रखें कि डेटा को पुनः प्राप्त करने के लिए आपके द्वारा निर्दिष्ट प्रत्येक कॉलम में उस डेटा को रखने के लिए संबंधित संग्रह डेटाटाइप होना चाहिए। क्योंकि PL/SQL रनटाइम इंजन हमेशा कॉलम से प्राप्त डेटा को समानांतर तरीके से संग्रह में संग्रहीत करता है।
उदाहरण के लिए
SELECT column_1, column_2 BULK COLLECT INTO collection_1, collection2 FROM table;
यहां कॉलम_1 से पुनर्प्राप्त किया गया डेटा संग्रह_1 में संग्रहीत हो जाएगा और डेटा कॉलम_2 से संग्रह_2 में स्वचालित रूप से संग्रहीत हो जाएगा।
तालिका का नाम किसी भी तालिका का नाम हो सकता है जिससे आप डेटा पुनर्प्राप्त करना चाहते हैं।
इसके बाद हमारे पास WHERE और ORDER BY क्लॉज हैं जो वैकल्पिक हैं लेकिन यदि आप चाहें तो उनका उपयोग कर सकते हैं।
अब जब हमने सिंटैक्स पर चर्चा कर ली है, तो आइए Oracle डेटाबेस में सेलेक्ट INTO स्टेटमेंट के साथ PL/SQL बल्क कलेक्ट क्लॉज के साथ काम करने का तरीका जानने के लिए एक सरल उदाहरण करते हैं।
SET SERVEROUTPUT ON; DECLARE TYPE nt_fName IS TABLE OF VARCHAR2 (20); TYPE nt_lName IS TABLE OF VARCHAR2 (20); fname nt_fName; lName nt_lName; BEGIN SELECT first_name, last_name BULK COLLECT INTO fName, lName FROM employees; --Print values from the collection-- FOR idx IN 1..fName.COUNT LOOP DBMS_OUTPUT.PUT_LINE (idx||' - '||fName (idx) ||' '||lName (idx)); END LOOP; END; /
उदाहरण की व्याख्या
यहाँ हमारे पास यह प्रदर्शित करने के लिए एक बहुत ही सरल कोड है कि Select-Into कथन के साथ बल्क कलेक्ट क्लॉज़ का उपयोग कैसे करें। इस कोड के डिक्लेरेशन सेक्शन में हमने पहले दो नेस्टेड टेबल टाइप कलेक्शन "nt_fName" और "nt_lName" को उनके संबंधित कलेक्शन वेरिएबल्स "fName" और "lName" के साथ बनाया। वास्तव में इन दोनों संग्रहों का उपयोग Select-Into कथन द्वारा लौटाए गए डेटा को रखने के लिए किया जाएगा।
आप नेस्टेड तालिका बनाने का तरीका यहां पढ़ सकते हैं।
डिक्लेरेशन सेक्शन में हमारे पास बल्क कलेक्ट क्लॉज के साथ सेलेक्ट-इन स्टेटमेंट होता है। इसके अलावा इस सेलेक्ट-इन स्टेटमेंट का उपयोग करके हम कर्मचारी तालिका के प्रथम नाम और अंतिम नाम कॉलम से सभी डेटा पुनर्प्राप्त कर रहे हैं। और बल्क कलेक्ट क्लॉज की मदद से हम उस डेटा को समानांतर तरीके से संबंधित कलेक्शंस में स्टोर कर रहे हैं।
सेलेक्ट-इन स्टेटमेंट के अलावा हमारे पास "फॉर लूप" भी है जो दोनों संग्रहों के डेटा को आउटपुट स्क्रीन पर प्रिंट कर रहा है।
देखना चाहिए
उस वीडियो को देखना सुनिश्चित करें जहां मैंने दिखाया है कि कैसे बल्क कलेक्ट क्लॉज कई संदर्भ स्विच को एक में संपीड़ित करता है और क्वेरी के प्रदर्शन को बेहतर बनाता है। लिंक यहां दिया गया है।
यही वह ट्यूटोरियल है जो सेलेक्ट-इनटू स्टेटमेंट के साथ बल्क कलेक्ट क्लॉज की अवधारणाओं को विस्तार से समझाता है। इस ट्यूटोरियल में मैंने उन सभी संभावित प्रश्नों के उत्तर देने का प्रयास किया है जिनका सामना आप अपनी प्रमाणन परीक्षा के साथ-साथ साक्षात्कार में कर सकते हैं।
आशा है आपको पढ़कर अच्छा लगा होगा। कृपया इस ब्लॉग को अपने दोस्तों के साथ अपने सामाजिक पर साझा करना सुनिश्चित करें। धन्यवाद और आपका दिन शुभ हो!