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

Cách sử dụng Oracle PLSQL Tables (Mảng liên kết hoặc bảng chỉ mục)

Bảng Oracle PLSQL

  • Bảng PLSQL là kiểu dữ liệu tổng hợp.
  • Các mảng này hoạt động giống như các mảng ngoại trừ mảng không có giới hạn trên, cho phép chúng liên tục mở rộng.
  • Chúng còn được gọi là chỉ mục theo bảng
  • Bảng PLSQL chứa hai phần tử

(1) Khóa chính của kiểu dữ liệu BINARY_INTEGER chỉ mục bảng, không cần liên tiếp. Bộ sưu tập được mở rộng bằng cách gán giá trị cho một phần tử sử dụng giá trị chỉ mục hiện không tồn tại.
chúng tôi cũng có thể lập chỉ mục theo giá trị chuỗi

(2) Một cột kiểu dữ liệu vô hướng hoặc bản ghi lưu chỉ mục theo các phần tử bảng

Cách xác định và khai báo loại bảng

Để tạo bảng PL / SQL, bạn thực hiện hai bước. Đầu tiên, bạn xác định một kiểu TABLE, sau đó khai báo các bảng PL / SQL thuộc kiểu đó. Bạn có thể xác định các loại TABLE trong phần khai báo của bất kỳ khối, chương trình con hoặc gói nào bằng cú pháp

Syntax 
 TYPE table_type_name IS TABLE OF datatype [NOT NULL] INDEX BY BINARY_INTEGER;

Nếu loại phần tử là một loại bản ghi, mọi trường trong bản ghi phải có một kiểu dữ liệu vô hướng như CHAR, DATE hoặc NUMBER.

Để chỉ định loại phần tử, bạn có thể sử dụng% TYPE để cung cấp kiểu dữ liệu của một biến hoặc cột cơ sở dữ liệu

DECLARE 
 TYPE DEPTTabTyp IS TABLE OF dept.dept_name%TYPE INDEX BY BINARY_INTEGER;

Bạn có thể thêm ràng buộc NOT NULL vào định nghĩa kiểu TABLE và do đó ngăn việc lưu trữ null trong bảng PL / SQL thuộc kiểu đó:

DECLARE 
 TYPE DEPTTabTyp IS TABLE OF dept.location%TYPE NOT NULL INDEX BY BINARY_INTEGER;

Bạn cũng có thể sử dụng% ROWTYPE để chỉ định loại phần tử.

DECLARE 
 TYPE deptTabTyp IS TABLE OF dept%ROWTYPE INDEX BY BINARY_INTEGER;

bạn sử dụng loại RECORD do người dùng xác định để chỉ định loại phần tử:

DECLARE 
 TYPE emp_phonetyp IS RECORD
 (
 Stdcode      PLS_INTEGER,
 phn_number   PLS_INTEGER,
 extension    PLS_INTEGER
 );
 TYPE emp_contact IS TABLE OF emp_phonetyp INDEX BY BINARY_INTEGER;

Sau khi bạn xác định một loại TABLE, bạn có thể khai báo các bảng PL / SQL thuộc loại đó

DECLARE   
 TYPE SalTabTyp IS TABLE OF emp.sal%TYPE 
 INDEX BY BINARY_INTEGER;
 TYPE EmpTabTyp IS TABLE OF emp%ROWTYPE
 INDEX BY BINARY_INTEGER;
 sal_tab SalTabTyp;  -- declare PL/SQL table
 emp_tab EmpTabTyp;  -- declare another PL/SQL table

Thuộc tính bảng PLSQL hoặc Phương thức

Một bảng PL / SQL có các thuộc tính EXISTS, COUNT, FIRST, LAST, PRIOR, NEXT và DELETE.

Chúng làm cho bảng PL / SQL dễ sử dụng hơn và các ứng dụng của bạn dễ bảo trì hơn.

plsql_table_name.attribute_name

Các thuộc tính tồn tại, PRIOR, NEXT và DELETE nhận tham số. Mỗi tham số phải là một biểu thức mang lại giá trị BINARY_INTEGER hoặc một giá trị có thể chuyển đổi hoàn toàn thành kiểu dữ liệu đó.

DELETE hoạt động giống như một thủ tục, được gọi là một câu lệnh. Tuy nhiên, các thuộc tính bảng PL / SQL khác hoạt động giống như một hàm, được gọi là một phần của một biểu thức.

Exists (n) Trả về true nếu phần tử thứ n trong bảng tồn tại
số lượng Trả về số phần tử trong bảng
Đầu tiên và cuối cùng FIRST và LAST trả về số chỉ mục đầu tiên và cuối cùng (nhỏ nhất và lớn nhất) trong bảng PL / SQL
TRƯỚC ( n ) trả về số chỉ mục đứng trước chỉ mục n trong bảng PL / SQL
TIẾP THEO ( n ) trả về số chỉ mục kế tiếp chỉ mục n
Xóa DELETE xóa tất cả các phần tử khỏi bảng PL / SQL. XÓA ( n ) loại bỏ n phần tử thứ. Nếu n là null, DELETE ( n ) Không lam gi cả. XÓA ( m , n ) xóa tất cả các phần tử trong phạm vi m .. n . Nếu m lớn hơn n hoặc nếu m hoặc n là null, DELETE ( m , n ) không làm gì cả

Bảng PL / SQL để di chuyển dữ liệu hàng loạt vào và ra khỏi các bảng cơ sở dữ liệu hoặc giữa các ứng dụng phía máy khách và các chương trình con được lưu trữ.

Cách điền dữ liệu trong Bảng PLSQL

Các bảng có kiểu dữ liệu đơn giản có thể được điền dưới dạng:

<variable>(<integer>) := <value>;

Các bảng có kiểu dữ liệu phức tạp sẽ cần các cột được điền riêng lẻ như sau:

<variable>(<integer>).<column_name> := <value>;

Hoặc từ con trỏ:

fetch <cursor_name> into <variable>(<integer>);
Type emptabletype  is table of varchar2(10)
Index by binary_integer;
emp_table emptabletyp;
emp_table (1) := ‘good’;
emp_table (2) := ‘bad’’;

Bạn cũng có thể truy xuất dữ liệu Oracle vào bảng PL / SQL theo ba cách khác

a) Câu lệnh SELECT INTO cho phép bạn chọn một hàng dữ liệu duy nhất

Sử dụng câu lệnh SELECT INTO, bạn có thể chọn một mục nhập cột vào một phần tử vô hướng. Hoặc, bạn có thể chọn toàn bộ một hàng thành một phần tử bản ghi. Trong ví dụ sau, bạn chọn một hàng từ bảng cơ sở dữ liệu ghi vào bản ghi được lưu trữ bởi phần tử đầu tiên của bảng PL / SQL dept_tab:

DECLARE
TYPE DeptTabTyp IS TABLE OF dept%ROWTYPE
INDEX BY BINARY_INTEGER;
dept_tab DeptTabTyp;
BEGIN
/* Select entire row into record stored by first element. */
SELECT * INTO dept_tab(1) FROM dept WHERE deptno = 10;
IF dept_tab(1).dname = 'ACCOUNTING' THEN ...
...
END;

b) Câu lệnh FETCH

Với câu lệnh FETCH, bạn có thể tìm nạp toàn bộ cột dữ liệu Oracle vào một bảng vô hướng PL / SQL.

Hoặc bạn có thể tìm nạp toàn bộ bảng dữ liệu Oracle vào bảng bản ghi PL / SQL.

DECLARE
TYPE EmpTabTyp IS TABLE OF emp%ROWTYPE
INDEX BY BINARY_INTEGER;
emp_tab EmpTabTyp;
i BINARY_INTEGER := 0;
CURSOR c1 IS SELECT * FROM emp;
BEGIN
OPEN c1;
LOOP
i := i + 1;
/* Fetch entire row into record stored by ith element. */
FETCH c1 INTO emp_tab(i);
EXIT WHEN c1%NOTFOUND;
-- process data record
END LOOP;
CLOSE c1;
END;

c) Vòng lặp FOR con trỏ cho phép bạn tìm nạp nhiều hàng.

DECLARE
TYPE EnameTabTyp IS TABLE OF emp.ename%TYPE
INDEX BY BINARY_INTEGER;
TYPE SalTabTyp IS TABLE OF emp.sal%TYPE
INDEX BY BINARY_INTEGER;
ename_tab EnameTabTyp;
sal_tab SalTabTyp;
n BINARY_INTEGER := 0;
BEGIN
/* Fetch entire columns into PL/SQL tables. */
FOR emp_rec IN (SELECT ename, sal FROM emp) LOOP
n := n + 1;
ename_tab(n) := emp_rec.ename;
sal_tab(n) := emp_rec.sal;
END LOOP;
...
END;

Bạn phải đọc các bài đăng PLSQL khác này

Cấu trúc và loại khối Oracle PLSQL
Bản ghi Oracle PLSQL
Câu hỏi phỏng vấn Oracle plsql
Hướng dẫn nhanh Oracle sql và plsql


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sự khác biệt giữa các lớp trình điều khiển Oracle jdbc?

  2. Cách tránh lỗi đột biến bảng

  3. Làm thế nào để kết nối trong java dưới dạng SYS với Oracle?

  4. Chuyển đổi Dấu thời gian Unix thành Giá trị ngày tháng trong Oracle

  5. Xuất kết quả truy vấn Oracle sang tệp HTML khi sử dụng SQLcl