पीएल / एसक्यूएल - एरेस

इस अध्याय में, हम PL / SQL में सरणियों पर चर्चा करेंगे। पीएल / एसक्यूएल प्रोग्रामिंग भाषा एक डेटा संरचना प्रदान करती है जिसे कहा जाता हैVARRAY, जो एक ही प्रकार के तत्वों के एक निश्चित आकार के अनुक्रमिक संग्रह को संग्रहीत कर सकते हैं। एक वैरिएबल का उपयोग डेटा के ऑर्डर किए गए संग्रह को संग्रहीत करने के लिए किया जाता है, हालांकि एक सरणी के समान प्रकार के संग्रह के रूप में एक सरणी के बारे में सोचना अक्सर बेहतर होता है।

सभी प्रकारों में सन्निहित स्मृति स्थान होते हैं। निम्नतम पता पहले तत्व से मेल खाता है और अंतिम तत्व से उच्चतम पता।

एक सरणी संग्रह प्रकार डेटा का एक हिस्सा है और यह चर-आकार सरणियों के लिए खड़ा है। हम बाद के अध्याय में अन्य संग्रह प्रकारों का अध्ययन करेंगे'PL/SQL Collections'

ए में प्रत्येक तत्व varrayइसके साथ एक सूचकांक जुड़ा हुआ है। इसका एक अधिकतम आकार भी है जिसे गतिशील रूप से बदला जा सकता है।

वैरायटी टाइप बनाना

इसके साथ एक प्रकार का प्रकार बनाया जाता है CREATE TYPEबयान। आपको अधिकतम आकार और प्रकार के तत्वों को वैरिएंट में संग्रहीत करना होगा।

स्कीमा स्तर पर VARRAY प्रकार बनाने के लिए मूल वाक्यविन्यास है -

CREATE OR REPLACE TYPE varray_type_name IS VARRAY(n) of <element_type>

कहाँ पे,

  • varray_type_name एक मान्य विशेषता नाम है,
  • n वैरायटी में तत्वों की संख्या (अधिकतम) है,
  • element_type सरणी के तत्वों का डेटा प्रकार है।

किसी वैरिएंट के अधिकतम आकार का उपयोग करके बदला जा सकता है ALTER TYPE बयान।

उदाहरण के लिए,

CREATE Or REPLACE TYPE namearray AS VARRAY(3) OF VARCHAR2(10); 
/ 

Type created.

PL / SQL ब्लॉक के भीतर VARRAY प्रकार बनाने के लिए मूल वाक्यविन्यास है -

TYPE varray_type_name IS VARRAY(n) of <element_type>

उदाहरण के लिए -

TYPE namearray IS VARRAY(5) OF VARCHAR2(10); 
Type grades IS VARRAY(5) OF INTEGER;

आइए अब अवधारणा को समझने के लिए कुछ उदाहरणों पर काम करते हैं -

उदाहरण 1

निम्नलिखित कार्यक्रम वर्णों के उपयोग को दर्शाता है -

DECLARE 
   type namesarray IS VARRAY(5) OF VARCHAR2(10); 
   type grades IS VARRAY(5) OF INTEGER; 
   names namesarray; 
   marks grades; 
   total integer; 
BEGIN 
   names := namesarray('Kavita', 'Pritam', 'Ayan', 'Rishav', 'Aziz'); 
   marks:= grades(98, 97, 78, 87, 92); 
   total := names.count; 
   dbms_output.put_line('Total '|| total || ' Students'); 
   FOR i in 1 .. total LOOP 
      dbms_output.put_line('Student: ' || names(i) || ' 
      Marks: ' || marks(i)); 
   END LOOP; 
END; 
/

जब एसक्यूएल प्रॉम्प्ट पर उपरोक्त कोड निष्पादित किया जाता है, तो यह निम्नलिखित परिणाम उत्पन्न करता है -

Total 5 Students 
Student: Kavita  Marks: 98 
Student: Pritam  Marks: 97 
Student: Ayan  Marks: 78 
Student: Rishav  Marks: 87 
Student: Aziz  Marks: 92 

PL/SQL procedure successfully completed.

Please note -

  • Oracle वातावरण में, वैरिएज़ के लिए शुरुआती इंडेक्स हमेशा 1 होता है।

  • आप वैरायट प्रकार की कंस्ट्रक्टर विधि का उपयोग करके वैरिएर तत्वों को इनिशियलाइज़ कर सकते हैं, जिसका वैरिएम जैसा ही नाम है।

  • Varrays एक आयामी सरणियाँ हैं।

  • एक वेरिएंट स्वचालित रूप से NULL होता है जब इसे घोषित किया जाता है और इसके तत्वों को संदर्भित किए जाने से पहले इसे आरंभीकृत किया जाना चाहिए।

उदाहरण 2

एक वैरिएबल के तत्व किसी भी डेटाबेस तालिका का% ROWTYPE या किसी भी डेटाबेस तालिका क्षेत्र के% TYPE हो सकते हैं। निम्नलिखित उदाहरण अवधारणा को दर्शाता है।

हम अपने डेटाबेस में संग्रहीत ग्राहक तालिका का उपयोग इस प्रकार करेंगे -

Select * from customers;  

+----+----------+-----+-----------+----------+ 
| ID | NAME     | AGE | ADDRESS   | SALARY   | 
+----+----------+-----+-----------+----------+ 
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 | 
|  2 | Khilan   |  25 | Delhi     |  1500.00 | 
|  3 | kaushik  |  23 | Kota      |  2000.00 | 
|  4 | Chaitali |  25 | Mumbai    |  6500.00 | 
|  5 | Hardik   |  27 | Bhopal    |  8500.00 | 
|  6 | Komal    |  22 | MP        |  4500.00 | 
+----+----------+-----+-----------+----------+

निम्नलिखित उदाहरण का उपयोग करता है cursor, जो आप एक अलग अध्याय में विस्तार से अध्ययन करेंगे।

DECLARE 
   CURSOR c_customers is 
   SELECT  name FROM customers; 
   type c_list is varray (6) of customers.name%type; 
   name_list c_list := c_list(); 
   counter integer :=0; 
BEGIN 
   FOR n IN c_customers LOOP 
      counter := counter + 1; 
      name_list.extend; 
      name_list(counter)  := n.name; 
      dbms_output.put_line('Customer('||counter ||'):'||name_list(counter)); 
   END LOOP; 
END; 
/

जब एसक्यूएल प्रॉम्प्ट पर उपरोक्त कोड निष्पादित किया जाता है, तो यह निम्नलिखित परिणाम उत्पन्न करता है -

Customer(1): Ramesh  
Customer(2): Khilan  
Customer(3): kaushik     
Customer(4): Chaitali  
Customer(5): Hardik  
Customer(6): Komal  

PL/SQL procedure successfully completed.