Thứ Tư, 26 tháng 10, 2022

PL / SQL - Mảng (array)

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ấu trúc này có thể lưu trữ một tập hợp tuần tự có kích thước cố định của các phần tử cùng kiểu. 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à chúng ta nên coi một 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.

Varrays trong PL / SQL

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 'Tập hợp PL/SQL' .

Mỗi phần tử trong varray có 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 bằng câu lệnh CREATE TYPE . 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 giản đồ 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 câu lệnh ALTER TYPE .

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. 


Xin lưu ý -

  • 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 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.

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 đây về cách sử dụng con trỏ , 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.


=============================
* KHOÁ HỌC ORACLE DATABASE A-Z ENTERPRISE trực tiếp từ tôi giúp bạn bước đầu trở thành những chuyên gia DBA, đủ kinh nghiệm đi thi chứng chỉ OA/OCP, đặc biệt là rất nhiều kinh nghiệm, bí kíp thực chiến trên các hệ thống Core tại VN chỉ sau 1 khoá học.
* CÁCH ĐĂNG KÝ: Gõ (.) hoặc để lại số điện thoại hoặc inbox https://m.me/tranvanbinh.vn hoặc Hotline/Zalo 090.29.12.888
* Chi tiết tham khảo:
https://bit.ly/oaz_w
=============================
KẾT NỐI VỚI CHUYÊN GIA TRẦN VĂN BÌNH:
📧 Mail: binhoracle@gmail.com
☎️ Mobile: 0902912888
⚡️ Skype: tranbinh48ca
👨 Facebook: https://www.facebook.com/BinhOracleMaster
👨 Inbox Messenger: https://m.me/101036604657441 (profile)
👨 Fanpage: https://www.facebook.com/tranvanbinh.vn
👨 Inbox Fanpage: https://m.me/tranvanbinh.vn
👨👩 Group FB: https://www.facebook.com/groups/DBAVietNam
👨 Website: https://www.tranvanbinh.vn
👨 Blogger: https://tranvanbinhmaster.blogspot.com
🎬 Youtube: http://bit.ly/ytb_binhoraclemaster
👨 Tiktok: https://www.tiktok.com/@binhoraclemaster?lang=vi
👨 Linkin: https://www.linkedin.com/in/binhoracle
👨 Twitter: https://twitter.com/binhoracle
👨 Địa chỉ: Tòa nhà Sun Square - 21 Lê Đức Thọ - Phường Mỹ Đình 1 - Quận Nam Từ Liêm - TP.Hà Nội

=============================
học oracle database, Tự học Oracle, Tài liệu Oracle 12c tiếng Việt, Hướng dẫn sử dụng Oracle Database, Oracle SQL cơ bản, Oracle SQL là gì, Khóa học Oracle Hà Nội, Học chứng chỉ Oracle ở đầu, Khóa học Oracle online,khóa học pl/sql, học dba, học dba ở việt nam, khóa học dba, khóa học dba sql, tài liệu học dba oracle, Khóa học Oracle online, học oracle sql, học oracle ở đâu tphcm, học oracle bắt đầu từ đâu, học oracle ở hà nội, oracle database tutorial, oracle database 12c, oracle database là gì, oracle database 11g, oracle download, oracle database 19c, oracle dba tutorial, oracle tunning, sql tunning , oracle 12c, oracle multitenant, Container Databases (CDB), Pluggable Databases (PDB), oracle cloud, oracle security, oracle fga, audit_trail, oracle dataguard, oracle goldengate, mview, oracle exadata, oracle oca, oracle ocp, oracle ocm , oracle weblogic, middleware, hoc solaris, hoc linux, hoc aix, unix, securecrt, xshell, mobaxterm, putty

ĐỌC NHIỀU

Trần Văn Bình - Oracle Database Master