Oracle डेटाबेस में संग्रह विधियों पर श्रृंखला में एक बार फिर से आपका स्वागत है। इस श्रृंखला में अब तक हमने कलेक्शन फंक्शन काउंट ( ) और कलेक्शन फंक्शन एक्ज़िस्ट ( ) को कवर किया है। आशा है आपको पढ़कर अच्छा लगा होगा। आज इस PL/SQL ट्यूटोरियल में हम पहले ( ) और आखिरी ( ) संग्रह के तरीके सीखेंगे।
पहले ( ) और अंतिम ( ) संग्रह के तरीके क्या हैं?
हम संग्रह में परिभाषित प्रथम और अंतिम अनुक्रमणिका मानों को जानने के लिए संग्रह फ़ंक्शन फर्स्ट एंड लास्ट का उपयोग करते हैं।
क्या हम इन संग्रह विधियों का उपयोग किसी भी प्रकार के संग्रह के साथ कर सकते हैं?
हां! आप इन दोनों कार्यों का उपयोग तीनों प्रकार के संग्रहों के साथ कर सकते हैं जो सहयोगी सरणी, नेस्टेड तालिका और VARRAYs हैं।
संग्रह विधि FIRST ( ) और LAST ( ) कब शून्य हो जाती है?
खाली संग्रह पर लागू होने पर या किसी प्रारंभिक संग्रह पर लागू होने पर दोनों फ़ंक्शन शून्य हो जाते हैं जिसमें कोई तत्व नहीं होता है।
क्या आप इन दोनों कार्यों के लिए फ़ंक्शन विनिर्देश सूचीबद्ध कर सकते हैं?
ज़रूर! क्यों नहीं। संग्रह समारोह के लिए विनिर्देश प्रथम ( ) है:
FUNCTION FIRST RETURN PLS_INTEGER | VARCHAR2
और संग्रह फ़ंक्शन LAST ( ) के लिए फ़ंक्शन विनिर्देश है:
FUNCTION LAST RETURN PLS_INTEGER | VARCHAR2
जानकारी:
स्ट्रिंग अनुक्रमित सहयोगी सरणी के लिए, ये विधियां स्ट्रिंग लौटाती हैं; "निम्नतम" और "उच्चतम" उस सत्र में उपयोग किए जाने वाले वर्ण सेट के क्रम से निर्धारित होते हैं।
क्या होगा यदि मेरे VARRAY में केवल 1 तत्व है?
उस स्थिति में संग्रह फ़ंक्शन FIRST ( ) हमेशा 1 होता है और संग्रह विधि LAST ( ) हमेशा COUNT के बराबर होती है।
क्या होगा यदि मैं इन कार्यों को एक आरंभिक संग्रह पर लागू कर दूं?
मेरा मतलब गंभीरता से है, आप ऐसा क्यों करेंगे! वैसे भी यदि आपने संग्रह समारोह को पहले और आखिरी में एक प्रारंभिक संग्रह में लागू किया है तो यह COLLECTION_IS_NULL अपवाद उठाएगा।
उदाहरण:कलेक्शन के साथ फर्स्ट एंड लास्ट कलेक्शन फंक्शन का उपयोग कैसे करें?
SET SERVEROUTPUT ON; DECLARE TYPE nt_tab IS TABLE OF NUMBER; col_var nt_tab := nt_tab(10, 20, 30, 40, 50); BEGIN DBMS_OUTPUT.PUT_LINE ('First Index of the Nested table is ' || col_var.FIRST); DBMS_OUTPUT.PUT_LINE ('Last Index of the Nested table is ' || col_var.LAST); END; /
उपरोक्त उदाहरण में हमने NT_TAB नाम से एक नेस्टेड तालिका बनाई है और संग्रह चर col_var का उपयोग करके इसे प्रारंभ किया है। इस नेस्टेड टेबल में 5 इंडेक्स हैं जिनमें हमने वैल्यूज को स्टोर किया है। इस नेस्टेड टेबल में सबसे कम इंडेक्स 1 है जिसका मान 10 है और अधिकतम इंडेक्स 5 है जिसका मान 50 है। इस प्रकार निष्पादन पर पहले DBMS_OUTPUT से परिणाम 1 होगा और दूसरे DBMS_OUTPUT स्टेटमेंट से 5 होगा।
आगे बढ़ें कोड को कॉपी करें और खुद रिजल्ट चेक करें।
क्या होगा यदि हम नेस्टेड तालिका के पहले तत्व को हटा दें? तब संग्रह समारोह FIRST का आउटपुट क्या होगा?
यह एक बहुत ही अच्छा सवाल है! यदि आप संग्रह फ़ंक्शन के पहले तत्व को हटाते हैं तो संग्रह फ़ंक्शन FIRST उस सबस्क्रिप्ट को वापस कर देगा जो 1 से अधिक है और कुछ डेटा धारण कर रहा है। आइए उदाहरण देखें:
SET SERVEROUTPUT ON; DECLARE TYPE nt_tab IS TABLE OF NUMBER; col_var nt_tab := nt_tab(10, 20, 30, 40, 50); BEGIN col_var.DELETE(1); DBMS_OUTPUT.PUT_LINE ('First Index after DELETE is ' || col_var.FIRST); END; /
उपरोक्त उदाहरण में हमने संग्रह विधि DELETE का उपयोग करके नेस्टेड तालिका nt_tab के पहले तत्व को हटा दिया है। पहले तत्व को हटाने के बाद जो इंडेक्स 1 पर 10 है, नई सबसे कम सबस्क्रिप्ट अब 2 है जिसमें कुछ डेटा संग्रहीत है। इस प्रकार निष्पादन पर परिणाम 2 होगा।
क्या होगा यदि मैं संग्रह के बीच से तत्व हटा दूं?
यदि आप डेटा को बीच से हटाते हैं तो संग्रह फ़ंक्शन LAST एक मान लौटाएगा जो COUNT विधि द्वारा दिए गए मान से अधिक है।
क्या हम FIRST और LAST संग्रह विधियों का उपयोग करके संग्रह की अनुक्रमणिका में संग्रहीत डेटा देख सकते हैं?
जब मैं इसी अवधारणा को कक्षा में समझा रहा था तो एक छात्रा ने हाथ उठाकर मुझसे पूछा।
महोदय, अब तक हम देखते हैं कि ये फ़ंक्शन संग्रह की अनुक्रमणिका संख्या लौटाते हैं। क्या होगा अगर हम उन इंडेक्स में संग्रहीत डेटा देखना चाहते हैं। क्या इन संग्रह विधियों FIRST &LAST का उपयोग करके अनुक्रमणिका में संग्रहीत डेटा को देखने का कोई तरीका है?
इस प्रश्न का उत्तर है, हाँ! बेशक . सबस्क्रिप्ट संख्या के साथ आप इन कार्यों का उपयोग संग्रह के निम्नतम और उच्चतम सूचकांक में संग्रहीत डेटा को देखने के लिए कर सकते हैं।
उदाहरण के लिए
SET SERVEROUTPUT ON; DECLARE TYPE nt_tab IS TABLE OF NUMBER; col_var nt_tab := nt_tab(10, 20, 30, 40, 50); BEGIN -- This output statement will return 10 which is the value stored at the first index DBMS_OUTPUT.PUT_LINE ('Value stored at First Index is ' || col_var(col_var.FIRST)); -- This output statement will return 50 which is the value stored at the last index DBMS_OUTPUT.PUT_LINE ('Value stored at First Index is ' || col_var(col_var.LAST)); END; /
पहली और आखिरी अनुक्रमणिका में संग्रहीत डेटा को देखने के लिए आपको बस इन फ़ंक्शन के फ़ंक्शन कॉल को संग्रह चर के कोष्ठक के अंदर रखना होगा जो कि col_var है जैसा हमने ऊपर के उदाहरण में किया था।
अब सवाल यह है कि क्या होगा यदि हम संग्रह को ट्रिम कर दें? तब संग्रह फ़ंक्शन LAST का आउटपुट क्या होगा? आगे बढ़ें और वीडियो ट्यूटोरियल देखें जहां मैंने समझाया है कि जब आप उदाहरण का उपयोग करके संग्रह को ट्रिम करते हैं तो संग्रह विधि का आउटपुट क्या होगा।
इन संग्रह विधियों के बारे में बस इतना ही। आशा है आपको यह ब्लॉग उपयोगी लगा होगा। धन्यवाद और आपका दिन शुभ हो!