इस ट्यूटोरियल में, आप सीखेंगे कि Oracle PL/SQL कलेक्शंस (नेस्टेड टेबल्स) को कैसे घोषित और इनिशियलाइज़ किया जाए।
Oracle PL/SQL - नेस्टेड टेबल
नेस्टेड टेबल बहुत हद तक PL/SQL टेबल से मिलती-जुलती हैं, जिन्हें Oracle में index-by
के नाम से जाना जाता है। टेबल। नेस्टेड टेबल index-by
. की कार्यक्षमता का विस्तार करते हैं अतिरिक्त संग्रह विधियों को जोड़कर तालिका (index-by
. के लिए तालिका विशेषताओं के रूप में जानी जाती है) टेबल्स) और नेस्टेड टेबल को डेटाबेस टेबल में स्टोर करने की क्षमता जोड़कर, यही वजह है कि उन्हें नेस्टेड टेबल कहा जाता है।
नेस्टेड तालिकाओं को सीधे SQL का उपयोग करके भी हेरफेर किया जा सकता है, और अतिरिक्त पूर्वनिर्धारित अपवाद उपलब्ध हैं।
इन अतिरिक्त सुविधाओं के अलावा, नेस्टेड तालिका की मूल कार्यक्षमता PL/SQL तालिका के समान है। एक नेस्टेड तालिका को दो कॉलम-कुंजी और मान के साथ डेटाबेस तालिका के रूप में बंद माना जा सकता है। जैसे index-tables
, नेस्टेड टेबल विरल हो सकते हैं, और चाबियों का अनुक्रमिक होना जरूरी नहीं है।
नेस्टेड टेबल घोषित करना
नेस्टेड तालिका प्रकार बनाने का सिंटैक्स है
TYPE table_name table_type . की तालिका है [नल नहीं];
जहां table_nameनए प्रकार का नाम है, और table_type
नेस्टेड तालिका में प्रत्येक तत्व का प्रकार है। Table_type
एक अंतर्निहित प्रकार, उपयोगकर्ता द्वारा परिभाषित ऑब्जेक्ट प्रकार, या %
. का उपयोग करके एक अभिव्यक्ति हो सकता है प्रकार।
नोट
<ब्लॉकक्वॉट>इंडेक्स-बाय टेबल और नेस्टेड टेबल के बीच एकमात्र वाक्यात्मक अंतर BINARY_INTEGER क्लॉज द्वारा INDEX की उपस्थिति है। यदि यह क्लॉज मौजूद नहीं है, तो टाइप नेस्टेड टेबल टाइप है। यदि यह खंड मौजूद है, तो प्रकार एक अनुक्रमणिका-तालिका प्रकार है।
कोड का निम्नलिखित घोषणात्मक खंड कुछ मान्य तालिका घोषणाएं दिखाता है:
DECLARE--ऑब्जेक्ट टाइप के आधार पर टेबल टाइप को परिभाषित करेंTYPE t_ClassTab IS TABLE OF Classobj;--%ROWTYPE पर आधारित एक टाइप टाइप t_StudentsTab IS TABLE of Students%ROWTYPE;--उपरोक्त प्रकार के वेरिएबल्सv_ClassList t_ClassesTab;v_StudentList t_StudentList t /पूर्व>Oracle PL/SQL - नेस्टेड टेबल इनिशियलाइज़ेशन
जब किसी तालिका को पूर्ववर्ती ब्लॉक के रूप में घोषित किया जाता है, तो इसे ऑब्जेक्ट प्रकार की तरह परमाणु रूप से न्यूल होने के लिए प्रारंभ किया जाता है। यदि आप NULL तालिका को असाइन करने का प्रयास करते हैं, तो त्रुटि "ORA-6531:अप्रारंभीकृत संग्रह का संदर्भ " जो पूर्वनिर्धारित अपवाद
COLLECTION_IS_NULL
. से मेल खाती है , उठाया जाता है।पिछले उदाहरण को जारी रखते हुए, निम्न निष्पादन अनुभाग इस त्रुटि को उत्पन्न करेगा:
BEGIN--यह असाइनमेंट COLLECTION_IS_NULL बढ़ाएगा क्योंकि--v_ClassList स्वचालित रूप से शून्य है।v_ClassList(1):=ClassObj ('HIS', 101, 'History 101', 30, 0, 4, NULL);END;तो आप नेस्टेड टेबल कैसे शुरू करते हैं? यह कंस्ट्रक्टर का उपयोग करके किया जा सकता है। ऑब्जेक्ट टाइप कंस्ट्रक्टर की तरह, नेस्टेड टेबल के कंस्ट्रक्टर के पास टेबल टाइप के समान ही एनाम होता है। हालांकि, यह तर्क के रूप में तत्वों की एक सूची लेता है, जिनमें से प्रत्येक को तालिका तत्व प्रकार के साथ संगत प्रकार होना चाहिए।
निम्न उदाहरण nsat3eed टेबल कंस्ट्रक्टर के उपयोग को दिखाता है:
DECLARETYPE t_NUMbersTab NUMBER की तालिका है;-- एक तत्व के साथ एक तालिका बनाएं।v_Tab1 t_NumbersTab:=t_NumbersTab(-1);-- पांच तत्वों के साथ एक तालिका बनाएं। 3, 5, 7);-- बिना तत्वों वाली तालिका बनाएं। यह तैयार मान को बदल देगा-- v_Tab(1) में, जिसे -1.v_Tab(1) :=12345;END;में इनिटिलाइज़ किया गया थाखाली टेबल
v_Tab2
. की घोषणा पर ध्यान दें पिछले ब्लॉक में:-- बिना तत्वों वाली तालिका बनाएं।v_Tab2 t_NumbersTab :=t_NumbersTab();
v_Tab2
बिना किसी तर्क के कंस्ट्रक्टर को कॉल करके इनिशियलाइज़ किया जाता है। यह एक ऐसी तालिका बनाता है जिसमें कोई तत्व नहीं है लेकिन परमाणु रूप से पूर्ण नहीं है। निम्नलिखित ब्लॉक इसे दर्शाता है:DECLARETYPE t_WordsTab VARCHAR2(50) की तालिका है;--एक NULL तालिका बनाएं।v_Tab1 t_WordsTab;--एक तत्व के साथ एक तालिका बनाएं, जो स्वयं NULL है। .PUT_LINE('v_Tab1 is NULL');ELSEDBMS_OUTPUT.PUT_LINE('v_Tab is not NULL');END IF;IF v_Tab2 IS NULL THENDBMS_OUTPUT.PUT_LINE('v_Tab2 is NULL');ELSEDBMS_OUTPUT.PUT_LINE('v_Tab2 नहीं है') );END IF;END;यदि हम इस ब्लॉक को चलाते हैं तो हमें निम्न आउटपुट मिलते हैं:
v_Tab1 है NULLv_Tab2 NULL नहीं हैशुरू में कुंजियां
जब एक कंस्ट्रक्टर का उपयोग करके एक टेबल को इनिशियलाइज़ किया जाता है, तो टेबल के तत्वों को क्रमिक रूप से क्रमांकित किया जाता है, 1 से लेकर कंस्ट्रक्टर कॉल में निर्दिष्ट तत्वों की संख्या तक। बाद में प्रसंस्करण के दौरान, कुछ कुंजियों पर संग्रहीत मान हटाए जा सकते हैं (DELETE विधि का उपयोग करके)। जब डेटाबेस से एक नेस्टेड तालिका का चयन किया जाता है, तो अनुक्रमिक होने के लिए आवश्यक होने पर कुंजियों को फिर से क्रमांकित किया जाता है क्योंकि वे प्रारंभ में हैं।