FETCH INTO स्टेटमेंट के साथ बल्क कलेक्ट क्लॉज
पिछले ट्यूटोरियल में हमने PL/SQL बल्क कलेक्ट के साथ SELECT-INTO स्टेटमेंट का उपयोग करके कई संदर्भ स्विच को एक में संपीड़ित करने में कामयाबी हासिल की। SELECT-INTO कथन एक SQL मानक क्वेरी है जिसका अर्थ है कि डेवलपर का कथन के निष्पादन पर अधिक नियंत्रण नहीं है।
यदि हम क्वेरी प्रदर्शन के बारे में बात करते हैं, तो हम SELECT-INTO स्टेटमेंट के साथ एक हद तक आगे नहीं बढ़ सकते हैं। आइए देखें कि हम SELECT-INTO स्टेटमेंट की इन सभी कमियों को कैसे दूर कर सकते हैं।
इस ब्लॉग में आप स्पष्ट कर्सर के FETCH-INTO स्टेटमेंट के साथ बल्क कलेक्ट क्लॉज का उपयोग करना सीखेंगे। चूंकि FETCH स्टेटमेंट कर्सर जीवन चक्र का हिस्सा हैं, इसलिए इस ट्यूटोरियल की बेहतर समझ के लिए स्पष्ट कर्सर का कार्यसाधक ज्ञान आवश्यक है। इसके लिए आप Oracle डेटाबेस में एक स्पष्ट कर्सर बनाने के तरीके पर ट्यूटोरियल देख सकते हैं।
हमें FETCH INTO स्टेटमेंट के साथ बल्क कलेक्ट क्लॉज का उपयोग क्यों करना चाहिए?
जैसा कि पिछले ब्लॉग में बताया गया है कि जब भी हम सेलेक्ट-इनटो स्टेटमेंट के साथ बल्क-कलेक्ट का इस्तेमाल करते हैं तो रनटाइम इंजन टास्क को प्रोसेस करने के लिए इंप्लिटेड कर्सर का इस्तेमाल करता है। लेकिन अगर हम FETCH-INTO स्टेटमेंट के साथ बल्क कलेक्ट का उपयोग करते हैं तो रनटाइम इंजन टास्क को प्रोसेस करने के लिए स्पष्ट कर्सर का उपयोग करेगा।
एक स्पष्ट कर्सर हमेशा हमारे मानक SQL प्रश्नों पर अग्रिम नियंत्रण प्राप्त करने में हमारी सहायता करता है। उदाहरण के लिए एक स्पष्ट कर्सर के साथ हम नियंत्रित कर सकते हैं कि रिकॉर्ड कब प्राप्त करें या कितने रिकॉर्ड हम एक बार में पुनर्प्राप्त करना चाहते हैं, हालांकि चयन-इनटो स्टेटमेंट के मामले में यह संभव नहीं है।
फ़ेच-इनटू स्टेटमेंट के साथ बल्क कलेक्ट का सिंटैक्स क्या है?
SELECT-INTO स्टेटमेंट के समान, बल्क कलेक्ट क्लॉज FETCH-INTO स्टेटमेंट की विशेषता के रूप में काम करता है। यहाँ वाक्य रचना है
FETCH <cursor_name> BULK COLLECT INTO <plsql_collection>;
FETCH स्टेटमेंट स्पष्ट कर्सर का हिस्सा हैं। यदि आप उनके पैरेंट कर्सर को घोषित किए बिना उन्हें निष्पादित करने का प्रयास करते हैं तो आपको एक त्रुटि मिलेगी। यह भी हमेशा याद रखें कि थोक संग्रह के लिए PL/SQL संग्रह ही एकमात्र समर्थित संरचना है।
उदाहरण:Oracle डाटाबेस में FETCH-INTO स्टेटमेंट के साथ PL/SQL बल्क कलेक्ट का उपयोग कैसे करें।
SET SERVEROUTPUT ON;
DECLARE
--Create an explicit cursor
CURSOR exp_cur IS
SELECT first_name FROM employees;
--Declare collection for holding the data
TYPE nt_fName IS TABLE OF VARCHAR2 (20);
fname nt_fName;
BEGIN
OPEN exp_cur;
LOOP
FETCH exp_cur BULK COLLECT INTO fname;
EXIT WHEN fname.count=0;
--Print data
FOR idx IN fname.FIRST.. fname.LAST
LOOP
DBMS_OUTPUT.PUT_LINE (idx||' '||fname(idx) );
END LOOP;
END LOOP;
CLOSE exp_cur;
END;
/
मैंने अपने YouTube चैनल पर वीडियो ट्यूटोरियल में इस पूरे कोड की हर एक लाइन के बारे में विस्तार से बताया है। आप इस ट्यूटोरियल को देख सकते हैं।
चूंकि इस कोड में हमने फ़ेच इन स्टेटमेंट के साथ बल्क कलेक्ट क्लॉज़ का उपयोग किया है, इसका मतलब है कि संदर्भ स्विचिंग कोई समस्या नहीं होगी। जैसा कि हम जानते हैं कि बल्क कलेक्ट क्लॉज कई स्विच को एक में संपीड़ित करता है ताकि आगे कोई प्रदर्शन बोतल गर्दन न हो।
लेकिन क्या इसका मतलब यह है कि यह कोड अच्छी तरह से अनुकूलित है और इसे और अधिक अनुकूलन की आवश्यकता नहीं है? या उस मामले के लिए भविष्य में क्वेरी प्रदर्शन हमारे लिए कभी कोई समस्या नहीं होगी?
इन सभी सवालों के जवाब पाने के लिए और साथ ही यह जानने के लिए बने रहें कि हम इस PL/SQL प्रोग्राम को और कैसे ऑप्टिमाइज़ कर सकते हैं।
आशा है आपको यह ब्लॉग अच्छा लगा होगा। यदि आपको कोई संदेह या प्रश्न है या आपको लगता है कि मैं इस ब्लॉग में कुछ उल्लेख करना भूल गया हूं तो मुझे मेरे फेसबुक पेज या ट्विटर पर लिखें। धन्यवाद और आपका दिन मंगलमय हो!