Chào mừng bạn trở lại với hướng dẫn cuối cùng trong loạt bài Tuyển tập PL / SQL. Loạt video hướng dẫn dài nhất từ trước đến nay trên kênh. Trong hướng dẫn này, chúng ta sẽ tìm hiểu về thủ tục Thu thập PL / SQL cuối cùng là thủ tục TRIM trong Cơ sở dữ liệu Oracle.
Phương pháp thu thập PL / SQL TRIM là gì?
Phương thức thu thập TRIM trong Oracle db là một thủ tục được nạp chồng bằng cách sử dụng mà bạn có thể xóa một hoặc nhiều phần tử khỏi phần cuối của một tập hợp.
Chúng ta có thể gọi phương thức thu thập là thủ tục TRIM trong Cơ sở dữ liệu Oracle bằng bao nhiêu cách?
Vì phương pháp thu thập PL / SQL nên TRIM là một thủ tục bị quá tải, do đó chúng ta có thể gọi nó theo hai cách khác nhau. Hai cách gọi khác nhau của thủ tục TRIM là:
- TRIM:Thủ tục cắt bỏ không có tham số.
Nếu chúng ta sử dụng thủ tục TRIM mà không có bất kỳ tham số nào thì nó sẽ chỉ xóa một phần tử khỏi phần cuối của tập hợp.
- TRIM:Cắt bỏ quy trình với một tham số.
Thủ tục TRIM được gọi bằng cách truyền một đối số sẽ xóa số phần tử khỏi phần cuối của bộ sưu tập như được chỉ định bởi tham số. Tham số đó phải là một số nguyên hợp lệ. Ngoài ra, nó không được lớn hơn số phần tử tối đa mà bộ sưu tập của bạn có.
Thông tin:Quy trình cắt xén sẽ phát sinh lỗi nếu có cố gắng cắt bớt khoảng trắng dưới 0 phần tử.
Chúng ta có thể sử dụng phương pháp thu thập PL / SQL TRIM với cả ba loại tập hợp không?
Rất tiếc là không, chúng tôi không thể. Tương tự như thủ tục Thu thập PL / SQL EXTEND, thủ tục TRIM chỉ có thể được sử dụng với các Bảng lồng nhau và VARRAY của tập hợp. Tuy nhiên, chúng tôi không thể sử dụng nó với Mảng liên kết.
Điều gì sẽ xảy ra nếu chúng ta sử dụng Quy trình thu thập PL / SQL TRIM với một mảng liên kết?
Nếu phương pháp thu thập Trim của các phiên bản Cơ sở dữ liệu Oracle được sử dụng với Mảng liên kết thì bạn sẽ gặp lỗi thời gian biên dịch .
Đặc tả của Thủ tục Trim trong Cơ sở dữ liệu Oracle là gì?
Đặc điểm kỹ thuật của thủ tục thu tiền TRIM là:
PROCEDURE TRIM (n PLS_INTEGER:= 1);
Nếu n là NULL thì trim sẽ không làm gì cả.
Tôi nghe thấy bạn nói trong video mà chúng tôi cũng có thể nhận được SUBSCRIPT_BEYOND_COUNT ngoại lệ?
Có, Phương pháp thu thập PL / SQL TRIM sẽ tăng SUBSCRIPT_BEYOND_COUNT ngoại lệ. Nếu có nỗ lực cắt bỏ nhiều phần tử hơn so với thực tế tồn tại trong bộ sưu tập.
Bạn có thể tìm thấy ví dụ về ngoại lệ này mà tôi đã trình bày trong video ở phần sau của blog này. Nếu bạn muốn xem video, thì đây là nó. Nếu không, hãy cuộn xuống.
Có bất kỳ trường hợp ngoại lệ nào khác được liên kết với phương pháp Trim của bộ sưu tập PL / SQL mà chúng ta nên biết không?
Có, có một ngoại lệ nữa được liên kết với thủ tục TRIM và đó là ngoại lệ COLLECTION_IS_NULL.
Bất cứ khi nào bạn áp dụng quy trình thu thập TRIM cho Bảng lồng nhau chưa khởi tạo hoặc VARRAY thì trình biên dịch sẽ nâng cao ngoại lệ COLLECTION_IS_NULL.
Chúng ta có thể sử dụng quy trình TRIM và DELETE cùng nhau không?
Không, chúng ta không thể sử dụng bộ sưu tập TRIM và thủ tục DELETE cùng nhau. Sử dụng chúng với nhau sẽ tạo ra kết quả bất ngờ.
Hãy nghĩ về một tình huống khi bạn đã XÓA một phần tử nằm ở cuối biến VARRAY và sau đó áp dụng quy trình TRIM trên cùng một biến. Bạn có thể đoán số phần tử mà bạn có thể đã loại bỏ không? Bạn có thể nhầm lẫn khi tin rằng hai yếu tố đã bị loại bỏ tuy nhiên thực tế là chỉ một yếu tố đã bị loại bỏ. TRIM hoạt động dựa trên trình giữ chỗ còn lại bởi thủ tục DELETE.
Để tránh những kết quả khó hiểu và đáng lo ngại này, bộ phận hỗ trợ cơ sở dữ liệu Oracle thực sự khuyến nghị rằng hai quy trình này nên được sử dụng riêng trên một tập hợp nhất định.
Còn các ví dụ thì sao? Chúng ta có đang làm chúng trong blog này hay không?
Chắc chắn, chúng tôi chắc chắn sẽ làm các ví dụ trong blog này. Trên thực tế, tôi sắp cho bạn thấy phần trình diễn của mỗi lệnh gọi TRIM của thủ tục PL / SQL Collection mà chúng tôi đã đề cập ở trên. Chúng ta bắt đầu:
1. Thủ tục thu thập PL / SQL TRIM không có tham số.
SET SERVEROUTPUT ON; DECLARE TYPE my_nestedTable IS TABLE OF number; nt_obj my_nestedTable := my_nestedTable(1,2,3,4,5); BEGIN nt_obj.TRIM; DBMS_OUTPUT.PUT_LINE ('After TRIM procedure'); FOR i IN 1..nt_obj.COUNT LOOP DBMS_OUTPUT.PUT_LINE (nt_obj (i)); END LOOP; END; /
2. Quy trình thu thập TRIM với tham số.
SET SERVEROUTPUT ON; DECLARE TYPE my_nestedTable IS TABLE OF number; nt_obj my_nestedTable := my_nestedTable(1,2,3,4,5); BEGIN nt_obj.TRIM (3); DBMS_OUTPUT.PUT_LINE ('After TRIM procedure'); FOR i IN 1..nt_obj.COUNT LOOP DBMS_OUTPUT.PUT_LINE (nt_obj(i)); END LOOP; END; /
3. Quy trình thu thập PL / SQL TRIM SUBSCRIPT_BEYOND_COUNT ngoại lệ.
SET SERVEROUTPUT ON; DECLARE TYPE my_nestedTable IS TABLE OF number; nt_obj my_nestedTable := my_nestedTable(1,2,3,4,5); BEGIN nt_obj.TRIM(6); DBMS_OUTPUT.PUT_LINE ('After TRIM procedure'); FOR i IN 1..nt_obj.COUNT LOOP DBMS_OUTPUT.PUT_LINE (nt_obj(i)); END LOOP; END; /
Ngoại lệ SUBSCRIPT_BEYOND_COUNT xảy ra khi chúng tôi chuyển một đối số lớn hơn tổng số phần tử của tập hợp. Trong ví dụ trên, bộ sưu tập mà chúng tôi sử dụng là bảng lồng nhau với tên ‘my_nestedTable’ có 5 phần tử số được lưu trữ trong đó. Tuy nhiên, trong lệnh gọi thủ tục, chúng tôi đã hướng dẫn trình biên dịch thành TRIM 6 phần tử, điều này chắc chắn là không thể, do đó trong trường hợp này trình biên dịch tăng SUBSCRIPT_BEYOND_COUNT ngoại lệ.
4. Quy trình thu thập TRIM với VARRAY.
SET SERVEROUTPUT ON; DECLARE TYPE inBlock_vry IS VARRAY (5) OF NUMBER; vry_obj inBlock_vry := inBlock_vry(1, 2, 3, 4, 5); BEGIN --TRIM without parameter vry_obj.TRIM; DBMS_OUTPUT.PUT_LINE ('After TRIM procedure'); FOR i IN 1..vry_obj.COUNT LOOP DBMS_OUTPUT.PUT_LINE (vry_obj(i)); END LOOP; --TRIM with Parameter vry_obj.TRIM (2); DBMS_OUTPUT.PUT_LINE ('After TRIM procedure'); FOR i IN 1..vry_obj.COUNT LOOP DBMS_OUTPUT.PUT_LINE (vry_obj(i)); END LOOP; END; /
Đó là phần hướng dẫn giải thích các khái niệm về thủ tục TRIM của PL / SQL Collection Method trong Oracle Database.
Hy vọng bạn thích nó. Hãy kết nối với tôi trên Trang Facebook của tôi để có thêm thông tin cập nhật và hiểu biết sâu sắc hơn về các khái niệm Cơ sở dữ liệu Oracle. Cảm ơn &chúc một ngày tốt lành!