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

Câu lệnh FORALL với mệnh đề giá trị-OF Bound trong cơ sở dữ liệu Oracle

Cho đến nay, chúng ta đã học cách sử dụng câu lệnh FORALL với một tập hợp dày đặc sử dụng mệnh đề Giới hạn dưới &Giới hạn trên và một tập hợp thưa thớt sử dụng mệnh đề giới hạn INDICES OF. Điều gì sẽ xảy ra nếu chúng ta chỉ muốn sử dụng câu lệnh FORALL với các phần tử được chọn của tập hợp? Chúng ta có thể làm được không? Có, chúng ta có thể dễ dàng làm điều đó bằng cách sử dụng câu lệnh FORALL với mệnh đề thứ ba và mệnh đề cuối cùng là 'VALUES-OF'.

Mệnh đề liên kết 'Giá trị của' là gì?

Câu lệnh FORALL là tất cả về việc ràng buộc các phần tử của bộ sưu tập với một câu lệnh DML duy nhất theo cách được tối ưu hóa. Sử dụng mệnh đề ràng buộc ‘Giá trị của’ của câu lệnh FORALL, chúng ta có thể liên kết các phần tử đã chọn của tập hợp với câu lệnh DML.

Cú pháp cho mệnh đề liên kết 'Giá trị của' là gì?

Trước khi hiểu các giá trị của mệnh đề ràng buộc hoạt động như thế nào, chúng ta hãy xem cú pháp của nó và tìm hiểu cách sử dụng mệnh đề ‘Giá trị của’ đúng về mặt cú pháp với câu lệnh FORALL trong Cơ sở dữ liệu Oracle.

FORALL idx IN VALUES OF indexing-collection
[Save exception]
DML/MERGE statement;

Thông tin:
Luôn nhớ tên của mệnh đề là GIÁ TRỊ-CỦA không phải GIÁ TRỊ-CỦA. Viết VALUE-OF sẽ gây ra lỗi có thể chấm dứt chương trình của bạn.
GIÁ TRỊ CỦA QUYỀN
GIÁ TRỊ CỦA sai

Mệnh đề liên kết giá trị hoạt động như thế nào?

Mệnh đề giá trị-of ràng buộc sẽ yêu cầu hai tập hợp. Bộ sưu tập đầu tiên sẽ là ‘ Bộ sưu tập nguồn’ . Chúng tôi sẽ thực hiện các hoạt động DML như chèn, xóa và cập nhật dữ liệu của bộ sưu tập này bằng cách sử dụng câu lệnh FORALL.

Bộ sưu tập thứ hai sẽ là ‘ Bộ sưu tập lập chỉ mục 'Sẽ chỉ định số chỉ mục của các phần tử đã chọn từ tập hợp đầu tiên. Các phần tử được chọn này sẽ là những phần tử mà bạn muốn thực hiện các hoạt động DML.

Vì mệnh đề Values-of bind chỉ định rằng giá trị của biến Loop Index (‘idx’ trong cú pháp trên) của câu lệnh FORALL dựa trên các giá trị của phần tử trong tập hợp khác. Do đó, chúng tôi đã gọi một tập hợp khác là Tập hợp lập chỉ mục trong cú pháp trên.

Vậy bộ sưu tập Lập chỉ mục này là gì?

Tập hợp chỉ mục là một nhóm các chỉ mục mà câu lệnh FORALL có thể lặp qua. Bộ sưu tập này có thể là một bộ sưu tập dày đặc cũng như một bộ sưu tập thưa thớt. Ngoài ra, các số chỉ mục được lưu trữ trong bộ sưu tập không cần phải là duy nhất và có thể được liệt kê theo thứ tự tùy ý.

Có bất kỳ hạn chế nào với mệnh đề Giá trị mà chúng ta nên biết không?

Có, có một số điều bạn phải biết trước khi làm việc với mệnh đề giá trị của giới hạn trong Cơ sở dữ liệu Oracle. Những hạn chế này là -

  • Bộ sưu tập lập chỉ mục phải là BẢNG NESTED hoặc ĐẾN LIÊN KẾT.
  • Nếu tập hợp lập chỉ mục là một mảng kết hợp thì nó phải được lập chỉ mục bởi PLS_INTEGER hoặc BINARY_INTEGER.
  • Các phần tử của tập hợp lập chỉ mục phải là PLS_INTEGER hoặc BINARY_INTEGER.

Ví dụ về mệnh đề giá trị của ràng buộc với câu lệnh FORALL trong Cơ sở dữ liệu Oracle:

Bước 1:Tạo bảng

CREATE TABLE tut_79 (
    selected_data     NUMBER(5)
);

Bước 2:Viết khối PL / SQL trình bày cách sử dụng mệnh đề Giá trị-of với câu lệnh FORALL trong Cơ sở dữ liệu Oracle.

SET SERVEROUTPUT ON;
DECLARE
    --Source collection
    TYPE My_NestedTable IS TABLE OF NUMBER;
    source_col My_NestedTable := My_NestedTable (9,18,27,36,45,54,63,72,81,90);
    
    --Indexing collection
    TYPE My_Array IS TABLE OF PLS_INTEGER INDEX BY PLS_INTEGER;
    index_col My_Array;
BEGIN
    --Initializing indexing collection with the index numbers.
    index_col   (1) :=  3;
    index_col   (5) :=  7;
    index_col   (12):=  8;
    index_col   (28):=  10;
    --FORALL statement 
    FORALL idx IN VALUES OF index_col
        INSERT INTO tut_79 VALUES (source_col (idx));
END;
/

Bạn có thể xem giải thích chi tiết về mã này trong video hướng dẫn. Ở đây tôi đã giải thích chi tiết từng dòng của khối PL / SQL này.

Đó là phần hướng dẫn về cách sử dụng mệnh đề Giá trị của ràng buộc với câu lệnh FORALL trong Cơ sở dữ liệu Oracle. Hy vọng bạn cảm thấy nó hữu ích. Hãy chia sẻ blog này với bạn bè của bạn trên phương tiện truyền thông xã hội của họ. Cũng đăng ký kênh YouTube của tôi để có thêm nhiều thông tin và hướng dẫn thú vị.

Cảm ơn và chúc một ngày tốt lành.


  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 sửa lỗi oracle.sql.ArrayDescriptor, oracle.sql.THER và oracle.sql.StructDescriptor không dùng nữa

  2. opatch trước yêu cầu

  3. SQL Server tương đương với hàm WM_CONCAT

  4. Lý do tại sao oracle phân biệt chữ hoa chữ thường?

  5. Subr hay LIKE nhanh hơn trong Oracle?