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

Phương pháp thu thập:Thủ tục DELETE trong Cơ sở dữ liệu Oracle

Quy trình XÓA trong Cơ sở dữ liệu Oracle

Như đã thảo luận trong phần Giới thiệu về các phương pháp thu thập, chúng ta có bảy hàm thu thập và 3 thủ tục thu thập. Do đó, tổng cộng chúng ta có 10 phương pháp thu thập, trong đó chúng ta đã thảo luận về 7 hàm thu thập cho đến nay. Vì vậy, hôm nay trong hướng dẫn này, chúng ta sẽ thảo luận về thủ tục thu thập PL / SQL đầu tiên là thủ tục DELETE trong Cơ sở dữ liệu Oracle.

Phương thức thu thập PL / SQL Xóa là gì?

Phương thức thu thập DELETE là một thủ tục được nạp chồng để xóa các phần tử khỏi tập hợp.

Ý bạn là gì bởi một thủ tục quá tải?

Bạn đã nghe nó đúng. Phương thức thu thập PL / SQL DELETE là một thủ tục được nạp chồng. Có nghĩa là bạn có thể sử dụng cùng một quy trình theo ba cách khác nhau . Ba cách khác nhau này là -

  • XÓA :Lệnh gọi thủ tục đơn giản mà không có bất kỳ tham số nào. Do đó, nếu thủ tục Bộ sưu tập PL / SQL DELETE được sử dụng mà không có bất kỳ tham số nào thì nó sẽ xóa tất cả các phần tử khỏi bộ sưu tập .
  • XÓA ( index-number ) :Lệnh gọi thủ tục với một tham số duy nhất. Tham số đơn này là số chỉ mục hợp lệ của tập hợp. Thủ tục thu thập DELETE được gọi bằng cách chuyển một số chỉ mục hợp lệ sẽ xóa phần tử của chỉ mục cụ thể .
  • XÓA ( chỉ mục đầu, chỉ mục kết thúc ) : Lệnh gọi thủ tục với hai tham số. Cách gọi thủ tục DELETE này được gọi là Xóa phạm vi . Theo cách này, bạn phải chỉ định hai Chỉ mục. Và thủ tục xóa phạm vi phần tử nằm giữa chỉ mục bắt đầu và chỉ mục kết thúc .

Nếu tập hợp là một mảng kết hợp được lập chỉ mục chuỗi thì chỉ mục bắt đầu và chỉ mục kết thúc là chuỗi; nếu không thì chỉ mục bắt đầu và kết thúc là số nguyên.

Chúng ta có thể sử dụng Thủ tục DELETE trong Cơ sở dữ liệu Oracle với tất cả các tập hợp không?

Có, phương pháp thu thập DELETE có thể được sử dụng cho cả ba loại tập hợp. Đó là - Bảng lồng nhau, VARRAY và Mảng liên kết.

Chờ đã! Nhưng nếu chúng ta sử dụng quy trình DELETE với các VARRAY thì nó sẽ không tạo ra một bộ sưu tập thưa thớt?

Vì VARRAY không phải là một tập hợp thưa thớt nên chúng tôi không thể xóa các hàng riêng lẻ khỏi nó. Hơn nữa, lệnh gọi thủ tục duy nhất mà chúng ta có thể thực hiện với VARRAY là lệnh đầu tiên. Phương thức tập hợp là DELETE mà không có bất kỳ đối số nào sẽ xóa tất cả các phần tử khỏi tập hợp. Cách duy nhất để xóa một hàng riêng lẻ khỏi VARRAY là cắt nó khỏi phần cuối của nó bằng cách gọi thủ tục khác TRIM.

Chúng tôi có thể mong đợi bất kỳ ngoại lệ nào với phương pháp thu thập DELETE không?

Có, có một ngoại lệ liên quan đến phương pháp thu thập PL / SQL DELETE. Nếu thủ tục DELETE được áp dụng cho Bảng lồng nhau chưa khởi tạo và VARRAY thì nó sẽ tạo ra ngoại lệ “Collection_is_Null”.

Ví dụ về phương pháp thu thập PL / SQL DELETE.

Hãy xem một số ví dụ về từng lệnh gọi Thủ tục DELETE được đề cập ở trên.

Ví dụ 1:Lệnh gọi thủ tục đơn giản không có đối số.

DECLARE
    TYPE my_nested_table IS
        TABLE OF NUMBER;
    var_nt my_nested_table := my_nested_table(2,4,6,8,10,12,14,16,18,20);
BEGIN

    --Range Delete
    var_nt.DELETE;
    FOR i IN 1..var_nt.LAST LOOP
        IF var_nt.EXISTS(i) THEN
            DBMS_OUTPUT.PUT_LINE('Value at Index ['||i||'] is '|| var_nt(i));
        END IF;
    END LOOP;
END;
/

Việc gọi thủ tục tập hợp DELETE mà không có bất kỳ đối số nào sẽ xóa tất cả các phần tử của tập hợp mà nó được áp dụng. Tương tự như vậy, trong ví dụ trên, chúng ta có một bảng lồng nhau với tên “my_nested_table” mà chúng ta đã áp dụng thủ tục DELETE. Do đó, khi thực hiện thành công, lệnh gọi thủ tục sẽ xóa tất cả 10 phần tử số được lưu trữ trong đó.

Cách đọc được Đề xuất:Cách tạo bảng lồng nhau cục bộ cho khối PL / SQL.

Ví dụ 2:Lệnh gọi thủ tục với một tham số duy nhất

DECLARE
    TYPE my_nested_table IS
        TABLE OF NUMBER;
    var_nt my_nested_table := my_nested_table(2,4,6,8,10,12,14,16,18,20);
BEGIN
    DBMS_OUTPUT.PUT_LINE('After Deleted');
    --Delete Specific Index
    var_nt.DELETE(5);
    IF var_nt.EXISTS(5) THEN
            DBMS_OUTPUT.PUT_LINE('Value at Index [5] is '|| var_nt(5));
    ELSE
        DBMS_OUTPUT.PUT_LINE('Data is Deleted');
    END IF;
END;
/

Tham số đơn này là số chỉ mục hợp lệ của tập hợp. Hơn nữa, thủ tục thu thập DELETE được gọi bằng cách chuyển một số chỉ mục hợp lệ sẽ loại bỏ phần tử của chỉ mục cụ thể. Vì vậy, trong ví dụ trên, chúng tôi đã chỉ định 5 làm đối số cho phương thức thu thập PL / SQL DELETE. Do đó, khi thực hiện thành công, lệnh gọi thủ tục sẽ xóa phần tử khỏi tập hợp được lưu trữ ở chỉ mục 5.

Ví dụ 3:Lệnh gọi thủ tục với hai tham số.

DECLARE
    TYPE my_nested_table IS
        TABLE OF NUMBER;
    var_nt my_nested_table := my_nested_table(2,4,6,8,10,12,14,16,18,20);
BEGIN

    --Delete Range
    var_nt.DELETE(2,6);
    FOR i IN 1..var_nt.LAST LOOP
        IF var_nt.EXISTS(i) THEN
            DBMS_OUTPUT.PUT_LINE('Value at Index ['||i||'] is '|| var_nt(i));
        END IF;
    END LOOP;
END;
/

Cách gọi thủ tục DELETE này được gọi là Xóa phạm vi. Ở đây bạn phải chỉ định hai Chỉ mục và thủ tục xóa phạm vi các phần tử nằm giữa chỉ mục bắt đầu và chỉ mục kết thúc. Trong ví dụ trên, chúng tôi đặt chỉ mục bắt đầu là 2 và chỉ mục kết thúc là 6. Điều này có nghĩa là khi thực hiện lệnh gọi thủ tục DELETE sẽ loại bỏ tất cả các phần tử nằm trong phạm vi này.

Hãy tiếp tục và sao chép các mã trên vào SQL Developer của bạn và tự thực thi chúng để xem kết quả đầu ra là gì.

Bạn cũng có thể xem video hướng dẫn về cùng chủ đề để được giải thích trực tiếp về tất cả các ví dụ trên.

Đó là hướng dẫn về phương pháp thu thập PL / SQL DELETE trong Cơ sở dữ liệu Oracle. Hy vọng bạn thích đọc và học được điều gì đó mới. Đảm bảo chia sẻ blog này trên phương tiện truyền thông xã hội của bạn. Cũng tham gia với tôi trên trang Facebook của tôi để biết thêm các khái niệm thú vị về PL / SQL.

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. Làm cách nào để bạn nhận được các kết quả được định dạng độc đáo từ một thủ tục Oracle trả về một con trỏ tham chiếu?

  2. Tại sao tôi không thể thực hiện với x as (...) với ADODB và Oracle?

  3. Điền một bảng PL / SQL từ một khối trong các biểu mẫu D2k của Oracle

  4. Ngoại lệ ORA-08103:đối tượng không còn tồn tại khi sử dụng setfetchsize của Hibernate

  5. Đối chiếu không phân biệt trọng âm và chữ hoa chữ thường trong Oracle với LIKE