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

Câu lệnh FORALL với Mệnh đề ràng buộc INDICES-OF trong Cơ sở dữ liệu Oracle

Tại sao CÀI ĐẶT Tuyên bố có CHỈ ĐỊNH Mệnh đề ràng buộc?

Câu lệnh FORALL với mệnh đề Lower &Upper Bound có lẽ là cách dễ nhất để xử lý dữ liệu hàng loạt cho đến khi chúng ta tham khảo một tập hợp dày đặc. Khi nói đến bộ sưu tập thưa thớt, mệnh đề Lower &Upper Bound không đứng vững. Ngoài ra, rất tiếc trong tình huống thực tế, cơ hội làm việc với bộ sưu tập dày đặc sẽ thấp hơn so với làm việc với bộ sưu tập thưa thớt.

Dù sao, nếu bạn tò mò thì chúng tôi đã thực hiện một cuộc biểu tình. Kiểm tra điều gì sẽ xảy ra khi chúng tôi sử dụng mệnh đề Giới hạn dưới &Giới hạn trên của câu lệnh FORALL với bộ sưu tập thưa thớt trong video trên kênh YouTube của chúng tôi tại đây.

Thiếu sót của mệnh đề Giới hạn dưới &Giới hạn trên của câu lệnh FORALL là nó không thể được sử dụng với một tập hợp thưa thớt. Có thể dễ dàng khắc phục khuyết điểm này bằng cách sử dụng các tùy chọn như ‘ Chỉ số của ’Hoặc‘ Giá trị của 'Điều khoản ràng buộc. Hướng dẫn này là tất cả về tùy chọn cũ.

INDICES-OF Bound mệnh đề

Tương tự như mệnh đề Giới hạn dưới &Giới hạn trên, mệnh đề INDICES-OF giúp chúng tôi xử lý dữ liệu hàng loạt bằng cách cho phép chúng tôi lặp lại thông qua bộ sưu tập. Sự khác biệt duy nhất là sử dụng mệnh đề INDICES OF, chúng ta có thể lặp qua một tập hợp dày đặc cũng như thưa thớt. Trong khi mệnh đề Giới hạn dưới &Giới hạn trên chỉ hoạt động với một tập hợp dày đặc.

Cú pháp của INDICES OF mệnh đề ràng buộc

FORALL index IN INDICES OF collection_variable
[SAVE EXCEPTION]
DML statements; 

Ở đâu:

FORALL là một từ khóa dành riêng cho Cơ sở dữ liệu Oracle, theo sau là Chỉ mục . Chỉ mục này là một bộ đếm vòng lặp được xác định ngầm, được khai báo bởi công cụ PL / SQL. Sau đó, bạn phải viết một từ khóa khác là IN. Tiếp theo là từ khóa IN, chúng ta có điều khoản ràng buộc là INDICES OF.

Ngay sau khi viết cụm từ dành riêng ‘INDICES OF’, chúng ta phải chỉ định biến tập hợp của tập hợp có dữ liệu mà chúng ta muốn sử dụng. Chúng tôi đã biết rằng chúng tôi đã tham chiếu bộ sưu tập trong chương trình thông qua biến bộ sưu tập của nó. Tiếp theo là chúng ta có tùy chọn LƯU TRỪ, đây là một lựa chọn không bắt buộc. Sau đó, chúng tôi có một câu lệnh DML, đây có thể là bất kỳ câu lệnh DML nào hoặc một câu lệnh MERGE.

Đảm bảo rằng câu lệnh DML hoặc câu lệnh MERGE bạn đang sử dụng với FORALL phải tham chiếu đến một tập hợp. Ngoài ra, một câu lệnh FORALL chỉ có thể xử lý một DML hoặc một câu lệnh MERGE cùng một lúc.

Ví dụ về INDICES OF mệnh đề ràng buộc

Ở đây, chúng ta sẽ thấy phần trình bày mệnh đề ràng buộc INDICES OF với câu lệnh FORALL. Ở đây, chúng tôi sẽ tìm nạp dữ liệu từ một bảng lồng nhau thưa thớt đã được khởi tạo và lưu trữ nó vào một bảng.

Như chúng ta đã học trong phần trước rằng câu lệnh FORALL lấy dữ liệu từ bộ sưu tập và lưu trữ nó vào một bảng. Vì vậy, trước tiên chúng ta sẽ tạo một bảng.

SET SERVEROUTPUT ON;
CREATE TABLE tut_78(
    mul_tab NUMBER(5)
);

Để giữ cho việc trình diễn dễ dàng, chúng tôi đã tạo một bảng rất đơn giản với tên tut_78. Bảng này chỉ có một mul_tab cột của NUMBER kiểu dữ liệu.

DECLARE
    TYPE my_nested_table IS TABLE OF number;
    var_nt my_nested_table := my_nested_table (9,18,27,36,45,54,63,72,81,90);
    --Another variable for holding total number of record stored into the table 
    tot_rec NUMBER;
BEGIN
    var_nt.DELETE(3, 6);
    
    FORALL idx IN INDICES OF var_nt
        INSERT INTO tut_78 (mul_tab) VALUES (var_nt(idx));
        
    SELECT COUNT (*) INTO tot_rec FROM tut_78;
    DBMS_OUTPUT.PUT_LINE ('Total records inserted are '||tot_rec);
END;
/

Bạn có thể tìm thấy lời giải thích chi tiết của đoạn mã trên trong video hướng dẫn. Nhưng chúng ta cũng hãy giải thích nhanh ở đây.

Phần khai báo của Khối PL / SQL ở trên

Ở đây, trong phần này, trước tiên chúng ta đã tạo một bảng lồng nhau với tên ‘ my_nested_table '. Nó đang giữ dữ liệu của NUMBER kiểu dữ liệu. Sau đó, chúng tôi đã khai báo biến bộ sưu tập của nó ‘ var_nt '. Sử dụng nó, chúng tôi đã khởi tạo 10 chỉ mục đầu tiên bằng cách lưu trữ 10 phần tử số vào bộ sưu tập của mình.

Ngoài Bảng lồng nhau và biến bộ sưu tập của nó, chúng tôi cũng đã khai báo một biến bổ sung ‘ tot_rec 'Của kiểu dữ liệu số. Biến này sẽ được sử dụng để giữ tổng số dữ liệu sẽ được lưu trữ trong bảng.

Phần Thực thi

Nếu bạn nhìn vào câu lệnh đầu tiên trong phần thực thi. Bạn sẽ thấy rằng bằng cách sử dụng phương pháp thu thập XÓA Tôi đã xóa dữ liệu từ chỉ mục 3 đến chỉ mục 6. Điều này có nghĩa là bây giờ chỉ mục của bộ sưu tập của chúng tôi không được điền tuần tự. Điều đó thay đổi bản chất của bộ sưu tập của chúng tôi từ DENSE thành SPARSE.

Ngay sau lệnh gọi DELETE phương thức thu, chúng ta có câu lệnh FORALL với mệnh đề ràng buộc INDICES OF. Sử dụng câu lệnh này, chúng tôi sẽ chèn vào bộ sưu tập ‘my_nested_table’ vào bảng tut_78.

Sau đó, chúng tôi có một câu lệnh SELECT-INTO. Câu lệnh này trả về tổng số hàng được chèn vào bảng tut_78 và lưu trữ giá trị đó vào biến tot_rec. Sau đó, bằng cách sử dụng câu lệnh DBMS_OUTPUT, chúng tôi đang hiển thị lại giá trị được lưu trữ trong biến tot_rec với một chuỗi được định dạng cho người dùng.

Tôi thực sự khuyên bạn nên xem hướng dẫn này trên kênh YouTube của tôi để được giải thích chuyên sâu về đoạn mã đã thảo luận ở trên. Ngoài ra, đừng quên đăng ký kênh để biết thêm nhiều bài hướng dẫn thú vị khác.

Cảm ơn đó là hướng dẫn PL / SQL về cách xử lý dữ liệu hàng loạt bằng cách sử dụng câu lệnh FORALL với mệnh đề ràng buộc INDICES OF. Hy vọng bạn thích đọc nếu vậy chia sẻ blog này trên phương tiện truyền thông xã hội của bạn. 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. Xử lý ExecuteScalar () khi không có kết quả nào được trả về

  2. NLS_INITCAP () Hàm trong Oracle

  3. Làm thế nào bạn có thể biết nếu một giá trị không phải là số trong Oracle?

  4. Những mạng lưới an toàn

  5. Cách tạo chế độ xem trong oracle