जैसा कि हमने पीएल/एसक्यूएल संग्रह विधियों के परिचय में देखा कि ओरेकल डेटाबेस में 7 संग्रह कार्य हैं। इन सात कार्यों में से हम पहले पांच तरीकों को पहले ही सीख चुके हैं। पहले और अगला अंतिम दो पीएल/एसक्यूएल संग्रह विधियां/कार्य हैं जिन्हें अभी एक्सप्लोर करना बाकी है।
इस प्रकार आज के पीएल/एसक्यूएल ब्लॉग में हम इन दो अछूते संग्रह विधियों की विस्तार से खोज करेंगे।
पहले और अगले संग्रह कार्य क्या हैं?
अपनी आस्तीन के नीचे कुछ कार्य करना हमेशा अच्छा होता है जो आपके संग्रह की सामग्री के माध्यम से नेविगेट करने में आपकी सहायता कर सकता है। फंक्शन प्रायर एंड नेक्स्ट वे फंक्शन हो सकते हैं।
ये दोनों कार्य इनपुट के रूप में संग्रह की एक अनुक्रमणिका लेते हैं और परिणाम लौटाते हैं।
उदाहरण के लिए PL/SQL संग्रह विधि PRIOR एक अनुक्रमणिका को इनपुट के रूप में लेता है और पिछले निम्नतम अनुक्रमणिका में संग्रहीत मान लौटाता है। जबकि संग्रह विधि अगला अगले उच्च सूचकांक से मान लौटाता है।
क्या पहले और अगले संग्रह कार्य या प्रक्रियाएं हैं?
प्रायर और नेक्स्ट दोनों फंक्शन हैं।
क्या हम तीनों प्रकार के संग्रहों के साथ इन दोनों कार्यों का उपयोग कर सकते हैं?
हां, तीनों प्रकार के संग्रहों के साथ पहले और अगले दोनों संग्रह कार्यों का उपयोग किया जा सकता है।
पीएल/एसक्यूएल संग्रह के तरीके पहले और अगले कब शून्य हो जाएंगे?
जब कोई कम सबस्क्रिप्ट मान उपलब्ध नहीं होते हैं तो संग्रह विधि पहले शून्य हो जाती है और संग्रह विधि अगला शून्य हो जाता है जब वापसी के लिए कोई उच्च सबस्क्रिप्ट मान उपलब्ध नहीं होता है।
सरल शब्दों में हम कह सकते हैं कि ये दोनों संग्रह कार्य शून्य लौटते हैं यदि उनका उपयोग क्रमशः संग्रह के पहले और अंतिम अनुक्रमणिका के साथ किया जाता है ।
संग्रह विधि नेक्स्ट और प्रायर का आउटपुट क्या होगा यदि हम उन्हें सहयोगी सरणी के साथ उपयोग करते हैं?
यदि संग्रह विधि PRIOR और NEXT का उपयोग सहयोगी सरणियों के साथ किया जाता है तो वे VARCHAR2 या LONG डेटाटाइप का आउटपुट लौटाएंगे।
मैंने सुना है कि, ये विधियां कुछ प्रकार के अपवाद को जन्म देती हैं। क्या यह सच है?
हाँ यह सच है। यदि इनमें से कोई भी फ़ंक्शन एक अप्रारंभीकृत नेस्टेड तालिका या एक वेरे पर लागू होता है तो वे COLLECTION_IS_NULL अपवाद उठाते हैं।
क्या आप हमें दिखा सकते हैं कि हमारे कोड में इन कार्यों का उपयोग कैसे किया जाता है?
हाँ हाँ, क्यों नहीं! मैं आपको एक बहुत ही आसान कोड की मदद से पहले और अगले दोनों संग्रह कार्यों का अनुप्रयोग दिखाऊंगा।
पहले संग्रहण विधि का उदाहरण।
इस विधि में हम सीखेंगे कि नेस्टेड टेबल के साथ संग्रह विधि का उपयोग कैसे करें।
SET SERVEROUTPUT ON; DECLARE TYPE my_nested_table IS TABLE OF NUMBER; var_nt my_nested_table := my_nested_table(9,18,27,36,45,54,63,72,81,90); BEGIN dbms_output.put_line('Index prior to index 3 is '||var_nt.PRIOR(3)); dbms_output.put_line('Value before 3rd Index is '||var_nt(var_nt.PRIOR(3))); END; /
उपरोक्त अनाम PL/SQL ब्लॉक में, हमारे पास 'प्री फंक्शन कॉल' के साथ दो आउटपुट स्टेटमेंट हैं। पहला आउटपुट स्टेटमेंट इंडेक्स नंबर 3 से पहले इंडेक्स नंबर लौटाएगा, जिसमें कुछ वैल्यू स्टोर की गई है। हमारे मामले में इंडेक्स नंबर 3 से पहले का इंडेक्स 2 है। इस प्रकार 2 पहले आउटपुट स्टेटमेंट का आउटपुट होगा।
दूसरे आउटपुट स्टेटमेंट में हमने प्रायर फंक्शन को कॉल किया और इसे कलेक्शन ऑब्जेक्ट के इनपुट के रूप में सप्लाई किया।
var_nt(var_nt.PRIOR(3))
Oracle इंजन पहले संग्रह फ़ंक्शन को निष्पादित करेगा (चलिए इसे भाग 1 कहते हैं) और भाग 1 से परिणाम का उपयोग करके यह संग्रह ऑब्जेक्ट को निष्पादित करेगा (चलिए इसे भाग 2 कहते हैं) और अंतिम परिणाम का उत्पादन करेगा जो हमारे मामले में 18 होगा। आगे बढ़ें, कोड को कॉपी करें और स्वयं को क्रियान्वित करने का प्रयास करें।
क्या होगा यदि हम नेस्टेड तालिका से पिछले निम्नतम सूचकांक को हटा दें?
तो अब सवाल यह है कि अगर आप हमारे कोड में पिछला निम्नतम सूचकांक जो 2 है, को हटा दें तो क्या होगा। उस स्थिति में, परिणाम निश्चित रूप से समान नहीं होगा। पिछला फ़ंक्शन पिछले निम्नतम सूचकांक को लौटाता है। लेकिन उस सूचकांक में कुछ मूल्य होना चाहिए।
इसे स्वयं आज़माएं। यह रहा कोड।
DECLARE TYPE my_nested_table IS TABLE OF NUMBER; var_nt my_nested_table := my_nested_table(9,18,27,36,45,54,63,72,81,90); BEGIN var_nt.DELETE(2); dbms_output.put_line('Index prior to index 3 is '||var_nt.PRIOR(3)); dbms_output.put_line('Value before 3rd Index is '||var_nt(var_nt.PRIOR(3))); END; /
आगे संग्रहण विधि का उदाहरण.
आप पीएल/एसक्यूएल संग्रह विधि का उपयोग कर सकते हैं जैसा कि आपने उपरोक्त कोड में पूर्व फ़ंक्शन का उपयोग किया था। संग्रह विधि अगला अगले उच्च सूचकांक से मान लौटाता है। यहाँ उदाहरण है
DECLARE TYPE my_nested_table IS TABLE OF NUMBER; var_nt my_nested_table := my_nested_table(9,18,27,36,45,54,63,72,81,90); BEGIN dbms_output.put_line('Next Higher Index to index 3 is '||var_nt.NEXT(3)); dbms_output.put_line('Value after 3rd Index is '||var_nt(var_nt.NEXT(3))); END; /
संग्रह फ़ंक्शन कॉल को छोड़कर दोनों उदाहरण लगभग समान हैं। इस पीएल/एसक्यूएल ब्लॉक के निष्पादन खंड में हमारे पास फिर से दो आउटपुट स्टेटमेंट हैं। पहला आउटपुट स्टेटमेंट अगले गैर-रिक्त इंडेक्स नंबर को वापस कर देगा जबकि दूसरा उस इंडेक्स में संग्रहीत डेटा को वापस कर देगा। इन दोनों कथनों की कार्यप्रणाली वही होगी जिसकी हमने ऊपर चर्चा की थी। आगे बढ़ें और कोड को कॉपी करें और आउटपुट देखें।
यह पीएल/एसक्यूएल संग्रह विधि अगला और पूर्व पर विस्तृत ट्यूटोरियल था। आशा है आपको पढ़कर अच्छा लगा होगा और कुछ नया सीखा होगा। इस ब्लॉग को अपने सोशल मीडिया पर शेयर करना न भूलें। इस ब्लॉग को अपने फेसबुक पर साझा करने के लिए यहां क्लिक करें और ट्विटर के लिए यहां क्लिक करें।
धन्यवाद और आपका दिन शुभ हो!