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.