PL / SQL - อาร์เรย์

ในบทนี้เราจะพูดถึงอาร์เรย์ใน PL / SQL ภาษาโปรแกรม PL / SQL จัดเตรียมโครงสร้างข้อมูลที่เรียกว่าVARRAYซึ่งสามารถจัดเก็บคอลเลกชันตามลำดับขนาดคงที่ขององค์ประกอบประเภทเดียวกัน varray ใช้ในการจัดเก็บการรวบรวมข้อมูลตามลำดับอย่างไรก็ตามมักจะดีกว่าที่จะคิดว่าอาร์เรย์เป็นชุดของตัวแปรประเภทเดียวกัน

ตัวแปรทั้งหมดประกอบด้วยตำแหน่งหน่วยความจำที่อยู่ติดกัน ที่อยู่ต่ำสุดสอดคล้องกับองค์ประกอบแรกและที่อยู่สูงสุดขององค์ประกอบสุดท้าย

อาร์เรย์เป็นส่วนหนึ่งของข้อมูลประเภทการรวบรวมและย่อมาจากอาร์เรย์ขนาดตัวแปร เราจะศึกษาประเภทคอลเลกชันอื่น ๆ ในบทต่อไป'PL/SQL Collections'.

แต่ละองค์ประกอบในไฟล์ varrayมีดัชนีที่เกี่ยวข้อง นอกจากนี้ยังมีขนาดสูงสุดที่สามารถเปลี่ยนแปลงได้แบบไดนามิก

การสร้าง Varray Type

ประเภท varray ถูกสร้างขึ้นด้วยไฟล์ CREATE TYPEคำให้การ. คุณต้องระบุขนาดสูงสุดและประเภทขององค์ประกอบที่จัดเก็บใน varray

ไวยากรณ์พื้นฐานสำหรับการสร้างประเภท VARRAY ที่ระดับสคีมาคือ -

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

ที่ไหน

  • varray_type_nameเป็นชื่อแอตทริบิวต์ที่ถูกต้อง
  • nคือจำนวนองค์ประกอบ (สูงสุด) ใน varray
  • element_typeคือประเภทข้อมูลขององค์ประกอบของอาร์เรย์

ขนาดสูงสุดของ varray สามารถเปลี่ยนแปลงได้โดยใช้ ALTER TYPE คำให้การ.

ตัวอย่างเช่น,

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

Type created.

ไวยากรณ์พื้นฐานสำหรับการสร้างประเภท VARRAY ภายในบล็อก PL / SQL คือ -

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; 
/

เมื่อรหัสด้านบนถูกเรียกใช้ที่พรอมต์ SQL จะให้ผลลัพธ์ดังต่อไปนี้ -

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 เสมอ

  • คุณสามารถเริ่มต้นองค์ประกอบ varray โดยใช้วิธีการสร้างของประเภท varray ซึ่งมีชื่อเดียวกับ varray

  • Varrays เป็นอาร์เรย์หนึ่งมิติ

  • varray จะเป็นโมฆะโดยอัตโนมัติเมื่อมีการประกาศและต้องเริ่มต้นก่อนจึงจะสามารถอ้างอิงองค์ประกอบได้

ตัวอย่าง 2

องค์ประกอบของ varray อาจเป็น% 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; 
/

เมื่อรหัสด้านบนถูกเรียกใช้ที่พรอมต์ SQL จะให้ผลลัพธ์ดังต่อไปนี้ -

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

PL/SQL procedure successfully completed.