PL / SQL - Mảng

Trong chương này, chúng ta sẽ thảo luận về mảng trong PL / SQL. Ngôn ngữ lập trình PL / SQL cung cấp một cấu trúc dữ liệu được gọi làVARRAY, có thể lưu trữ tập hợp tuần tự có kích thước cố định của các phần tử cùng loại. Một varray được sử dụng để lưu trữ một bộ sưu tập dữ liệu có thứ tự, tuy nhiên, tốt hơn là bạn nên coi mảng là một tập hợp các biến cùng kiểu.

Tất cả các varrays bao gồm các vị trí bộ nhớ liền kề. Địa chỉ thấp nhất tương ứng với phần tử đầu tiên và địa chỉ cao nhất cho phần tử cuối cùng.

Mảng là một phần của dữ liệu kiểu tập hợp và nó là viết tắt của mảng có kích thước thay đổi. Chúng ta sẽ nghiên cứu các kiểu tập hợp khác trong chương sau'PL/SQL Collections'.

Mỗi phần tử trong một varraycó một chỉ mục được liên kết với nó. Nó cũng có kích thước tối đa có thể được thay đổi động.

Tạo kiểu Varray

Một kiểu varray được tạo với CREATE TYPEtuyên bố. Bạn phải chỉ định kích thước tối đa và loại phần tử được lưu trữ trong varray.

Cú pháp cơ bản để tạo kiểu VARRAY ở cấp lược đồ là:

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

Ở đâu,

  • varray_type_name là tên thuộc tính hợp lệ,
  • n là số phần tử (tối đa) trong varray,
  • element_type là kiểu dữ liệu của các phần tử của mảng.

Kích thước tối đa của một varray có thể được thay đổi bằng cách sử dụng ALTER TYPE tuyên bố.

Ví dụ,

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

Type created.

Cú pháp cơ bản để tạo kiểu VARRAY trong khối PL / SQL là:

TYPE varray_type_name IS VARRAY(n) of <element_type>

Ví dụ -

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

Bây giờ chúng ta hãy làm một vài ví dụ để hiểu khái niệm -

ví dụ 1

Chương trình sau minh họa việc sử dụng varrays:

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

Khi đoạn mã trên được thực thi tại dấu nhắc SQL, nó tạo ra kết quả sau:

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 -

  • Trong môi trường Oracle, chỉ số bắt đầu cho các varrays luôn là 1.

  • Bạn có thể khởi tạo các phần tử varray bằng cách sử dụng phương thức khởi tạo của kiểu varray, có cùng tên với varray.

  • Varrays là mảng một chiều.

  • Một varray tự động là NULL khi nó được khai báo và phải được khởi tạo trước khi các phần tử của nó có thể được tham chiếu.

Ví dụ 2

Các phần tử của một varray cũng có thể là% ROWTYPE của bất kỳ bảng cơ sở dữ liệu nào hoặc% TYPE của bất kỳ trường bảng cơ sở dữ liệu nào. Ví dụ sau minh họa khái niệm này.

Chúng tôi sẽ sử dụng bảng CUSTOMERS được lưu trữ trong cơ sở dữ liệu của chúng tôi dưới dạng:

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 | 
+----+----------+-----+-----------+----------+

Ví dụ sau làm cho việc sử dụng cursor, mà bạn sẽ nghiên cứu chi tiết trong một chương riêng biệt.

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

Khi đoạn mã trên được thực thi tại dấu nhắc SQL, nó tạo ra kết quả sau:

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

PL/SQL procedure successfully completed.