Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Mục đích của việc sử dụng các loại tập hợp PL / SQL khác nhau trong Oracle

Hãy bắt đầu với Bảng lồng nhau, chúng là hình thức thu thập phổ biến nhất và do đó đại diện cho một cơ sở hữu ích để so sánh.

Một bảng lồng nhau là một biến có thể chứa nhiều hơn một trường hợp của một thứ gì đó, thường là một bản ghi từ một bảng cơ sở dữ liệu. Chúng có thể được khai báo như thế này:

type emp_nt is table of emp%rowtype;
emp_rec_nt emp_nt;

Chúng hữu ích bất cứ khi nào chúng ta muốn lưu trữ nhiều trường hợp dữ liệu mà chúng ta muốn thực hiện cùng một việc. Ví dụ cổ điển đang sử dụng BULK COLLECT để lưu trữ nhiều bản ghi:

select * 
bulk collect into emp_rec_nt
from employees;

Điều này cung cấp cho chúng tôi một nguồn dữ liệu mà chúng tôi có thể lặp lại; quan trọng là chúng ta có thể điều hướng ngược cũng như chuyển tiếp, thậm chí bỏ qua đến cuối hoặc đầu, đó là những điều chúng ta không thể làm với con trỏ. Các bảng lồng nhau có thể là tập hợp của bất kỳ kiểu dữ liệu nào, bao gồm các tổng hợp như bản ghi PL / SQL hoặc các loại do người dùng xác định.

Một bảng Chỉ mục theo tốt hơn được gọi (như các tài liệu làm) một Mảng liên kết. Đây là những tập hợp đơn giản gồm các thuộc tính đơn lẻ với một chỉ mục. Các bảng lồng nhau cũng có chỉ mục nhưng chỉ mục của chúng chỉ là số hàng. Với một mảng kết hợp, chỉ mục có thể có ý nghĩa, tức là có nguồn gốc từ một giá trị dữ liệu. Vì vậy, chúng rất hữu ích cho việc lưu trữ các giá trị dữ liệu vào bộ nhớ đệm để sử dụng sau này. Chỉ mục có thể là một số hoặc (kể từ 9iR2) là một chuỗi có thể rất hữu ích. Ví dụ:đây là một mảng lương liên kết được lập chỉ mục bởi định danh nhân viên.

type emp_sal_aa is table of emp.sql%type
     index by emp.empno%type;
l_emp_sales emp_sal_aa;

Lưu ý rằng tôi có thể đã khai báo mảng đó bằng INDEX BY BINARY_INTEGER nhưng rõ ràng hơn là sử dụng cú pháp% TYPE để thay thế (mã tự lập tài liệu). Các phần tử của mảng đó có thể được xác định bằng một giá trị chỉ mục, trong trường hợp này là EMPNO:

l_emp_sals(l_emp_no) := l_emp_sal;

Ngoài các bảng tham chiếu trong bộ nhớ đệm hoặc các giá trị tra cứu tương tự, không có nhiều trường hợp sử dụng cho mảng kết hợp.

Mảng biến chỉ là các bảng lồng nhau với giới hạn được xác định trước về số lượng phần tử. Vì vậy, có lẽ tên gây hiểu nhầm:chúng thực sự là các mảng cố định. Có rất ít điều chúng ta có thể làm với VArrays mà chúng ta không thể làm với các bảng lồng nhau (ngoại trừ việc hạn chế số lượng phần tử và khá hiếm khi chúng ta muốn làm điều đó). Chúng được khai báo như thế này:

type emp_va is varray(14) of emp%rowtype;
emp_rec_va emp_va;

Chúng tôi có thể sử dụng thu thập số lượng lớn để điền một VArray ...

select * 
bulk collect into emp_rec_va
from employees;

Tuy nhiên, chúng tôi phải chắc chắn rằng truy vấn sẽ trả về nhiều nhất là số phần tử được chỉ định trong khai báo của VArray. Nếu không, SELECT sẽ vượt qua ORA-22165.

Không có trường hợp sử dụng nào cho mảng biến. Được rồi, điều đó hơi khắc nghiệt, nhưng hầu như bạn sẽ sử dụng các bảng lồng nhau để thay thế. Một lợi thế lớn của VArrays so với các bảng lồng nhau là chúng đảm bảo thứ tự của các phần tử. Vì vậy, nếu bạn phải lấy các phần tử ra theo thứ tự như khi bạn chèn chúng, hãy sử dụng VArray.

Tài liệu PL / SQL dành toàn bộ chương cho các bộ sưu tập. Tìm hiểu thêm.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách tách một chuỗi trong Oracle

  2. Làm mới / Cập nhật màn hình biểu mẫu trong Oracle D2k Forms 6i

  3. % Type có nghĩa là gì trong Oracle sql?

  4. Nhận ORA-03115:kiểu dữ liệu mạng không được hỗ trợ hoặc lỗi đại diện khi tìm nạp mảng varchar từ pl / sql ẩn danh

  5. Làm cách nào để chuyển đổi câu lệnh nối bên ngoài bên trái kế thừa trong Oracle?