Trong chương này, chúng ta sẽ thảo luận về các Tập hợp trong PL/SQL. Tập hợp là một nhóm có thứ tự các phần tử có cùng kiểu dữ liệu. Mỗi phần tử được xác định bằng một chỉ số con duy nhất thể hiện vị trí của nó trong tập hợp.
PL/SQL cung cấp ba kiểu tập hợp:
Lập chỉ mục theo bảng hoặc mảng liên kết
Bảng lồng nhau
Mảng kích thước thay đổi hoặc Varray
Tài liệu Oracle cung cấp các đặc điểm sau cho từng loại bộ sưu tập:
Chúng ta đã thảo luận về varray trong chương 'Mảng PL/SQL' . Trong chương này, chúng ta sẽ thảo luận về các bảng PL/SQL.
Cả hai loại bảng PL/SQL, tức là bảng theo chỉ mục và bảng lồng nhau có cấu trúc giống nhau và các hàng của chúng được truy cập bằng cách sử dụng ký hiệu chỉ số con. Tuy nhiên, hai loại bảng này khác nhau ở một khía cạnh; các bảng lồng nhau có thể được lưu trữ trong một cột cơ sở dữ liệu và các bảng theo chỉ mục thì không.
Lập index (chỉ mục) theo bảng
Bảng theo chỉ mục (còn được gọi là mảng kết hợp ) là một tập hợp các cặp khóa-giá trị . Mỗi khóa là duy nhất và được sử dụng để định vị giá trị tương ứng. Khóa có thể là một số nguyên hoặc một chuỗi.
Một bảng chỉ mục được tạo bằng cú pháp sau. Ở đây, chúng tôi đang tạo một bảng chỉ mục có tên table_name , các khóa trong số đó sẽ thuộc kiểu subscript_type và các giá trị liên quan sẽ thuộc element_type
TYPE type_name IS TABLE OF element_type [NOT NULL] INDEX BY subscript_type;
table_name type_name;
Thí dụ
Ví dụ sau đây cho thấy cách tạo một bảng để lưu trữ các giá trị số nguyên cùng với tên và sau đó nó sẽ in ra cùng một danh sách các tên.
DECLARE
TYPE salary IS TABLE OF NUMBER INDEX BY VARCHAR2(20);
salary_list salary;
name VARCHAR2(20);
BEGIN
-- adding elements to the table
salary_list('Rajnish') := 62000;
salary_list('Minakshi') := 75000;
salary_list('Martin') := 100000;
salary_list('James') := 78000;
-- printing the table
name := salary_list.FIRST;
WHILE name IS NOT null LOOP
dbms_output.put_line
('Salary of ' || name || ' is ' || TO_CHAR(salary_list(name)));
name := salary_list.NEXT(name);
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:
Salary of James is 78000
Salary of Martin is 100000
Salary of Minakshi is 75000
Salary of Rajnish is 62000
PL/SQL procedure successfully completed.
Thí dụ
Các phần tử của bảng theo chỉ mục 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 |
+----+----------+-----+-----------+----------+
DECLARE
CURSOR c_customers is
select name from customers;
TYPE c_list IS TABLE of customers.Name%type INDEX BY binary_integer;
name_list c_list;
counter integer :=0;
BEGIN
FOR n IN c_customers LOOP
counter := counter +1;
name_list(counter) := n.name;
dbms_output.put_line('Customer('||counter||'):'||name_lis t(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
Bảng lồng nhau
Một bảng lồng nhau giống như một mảng một chiều với một số phần tử tùy ý. Tuy nhiên, một bảng lồng nhau khác với một mảng ở các khía cạnh sau:
Một mảng có một số phần tử được khai báo, nhưng một bảng lồng nhau thì không. Kích thước của một bảng lồng nhau có thể tăng động.
Một mảng luôn dày đặc, tức là nó luôn có các chỉ số con liên tiếp. Một mảng lồng nhau ban đầu dày đặc, nhưng nó có thể trở nên thưa thớt khi các phần tử bị xóa khỏi nó.
Một bảng lồng nhau được tạo bằng cú pháp sau:
TYPE type_name IS TABLE OF element_type [NOT NULL];
table_name type_name;
Khai báo này tương tự như khai báo bảng chỉ mục , nhưng không có mệnh đề INDEX BY .
Một bảng lồng nhau có thể được lưu trữ trong một cột cơ sở dữ liệu. Nó còn có thể được sử dụng để đơn giản hóa các hoạt động SQL trong đó bạn nối bảng một cột với một bảng lớn hơn. Một mảng kết hợp không thể được lưu trữ trong cơ sở dữ liệu.
Thí dụ
Các ví dụ sau minh họa việc sử dụng bảng lồng nhau:
DECLARE
TYPE names_table IS TABLE OF VARCHAR2(10);
TYPE grades IS TABLE OF INTEGER;
names names_table;
marks grades;
total integer;
BEGIN
names := names_table('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.
Thí dụ
Các phần tử của bảng lồng nhau 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 |
+----+----------+-----+-----------+----------+
DECLARE
CURSOR c_customers is
SELECT name FROM customers;
TYPE c_list IS TABLE of customerS.No.ame%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.
Phương thức thu thập
PL/SQL cung cấp các phương thức thu thập được tích hợp sẵn giúp sử dụng tập hợp dễ dàng hơn. Bảng sau liệt kê các phương pháp và mục đích của chúng:
Ngoại lệ Bộ sưu tập
Bảng sau cung cấp các ngoại lệ của bộ sưu tập và khi nào chúng được nâng lên:
* 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
=============================
PL/SQL, 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