Như chúng ta đã thấy trong phần Giới thiệu về Phương pháp Thu thập PL / SQL rằng có 7 hàm thu thập trong Cơ sở dữ liệu Oracle. Trong số bảy hàm này, chúng ta đã học được năm phương pháp đầu tiên. Trước và Tiếp theo là hai phương thức / chức năng thu thập PL / SQL cuối cùng vẫn còn để khám phá.
Vì vậy, trong blog PL / SQL của ngày hôm nay, chúng ta sẽ khám phá chi tiết hai phương pháp thu thập chưa được chạm này.
Chức năng Bộ sưu tập Trước và Tiếp theo là gì?
Luôn luôn tốt nếu có một số chức năng có thể giúp bạn điều hướng qua nội dung bộ sưu tập của mình. Chức năng Trước và Tiếp theo có thể là những chức năng đó.
Cả hai hàm này đều lấy một chỉ mục của tập hợp làm đầu vào và trả về kết quả.
Ví dụ:phương pháp thu thập PL / SQL PRIOR lấy một chỉ mục làm đầu vào và trả về giá trị được lưu trữ vào chỉ mục thấp nhất trước đó. Trong khi phương thức thu thập NEXT trả về giá trị từ chỉ mục cao hơn tiếp theo.
Có phải là Chức năng hoặc Quy trình thu thập trước và sau không?
Cả Trước và Tiếp theo đều là các hàm.
Chúng ta có thể sử dụng cả hai hàm này với cả ba loại bộ sưu tập không?
Có, cả hai chức năng thu thập Trước và Tiếp theo đều có thể được sử dụng với cả ba loại tập hợp.
Khi nào thì các phương thức thu thập PL / SQL trước và sau sẽ trả về giá trị rỗng?
Phương thức Bộ sưu tập Trước trả về null khi không có sẵn giá trị chỉ số con thấp hơn và Phương thức Bộ sưu tập Tiếp theo trả về null khi không có giá trị chỉ số con nào cao hơn có sẵn để trả về.
Nói một cách dễ hiểu, chúng ta có thể nói rằng cả hai hàm thu thập này đều trả về Null nếu chúng được sử dụng với các chỉ mục Đầu tiên và Cuối cùng của một tập hợp tương ứng .
Đầu ra của phương thức Collection Next và Prior sẽ như thế nào nếu chúng ta sử dụng chúng với mảng kết hợp?
Nếu phương thức thu thập PRIOR và NEXT được sử dụng với các mảng kết hợp thì chúng sẽ trả về kết quả đầu ra là kiểu dữ liệu VARCHAR2 hoặc LONG.
Tôi nghe nói rằng, các phương pháp này nêu ra một số loại ngoại lệ. Có đúng như vậy không?
Vâng, nó là sự thật. Nếu một trong hai hàm này được áp dụng cho Bảng lồng nhau chưa khởi tạo hoặc Varray thì chúng sẽ nâng cao ngoại lệ COLLECTION_IS_NULL.
Bạn có thể cho chúng tôi biết cách sử dụng các hàm này trong mã của chúng tôi không?
Chắc chắn, tại sao không! Tôi sẽ chỉ cho bạn ứng dụng của cả chức năng thu thập Trước và Tiếp theo với sự trợ giúp của một đoạn mã rất dễ dàng.
Ví dụ về Phương pháp Thu thập Trước.
Trong phương pháp này, chúng ta sẽ học cách sử dụng phương pháp thu thập Trước với Bảng lồng nhau.
SET SERVEROUTPUT ON; 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); BEGIN dbms_output.put_line('Index prior to index 3 is '||var_nt.PRIOR(3)); dbms_output.put_line('Value before 3rd Index is '||var_nt(var_nt.PRIOR(3))); END; /
Trong Khối PL / SQL ẩn danh ở trên, chúng ta có hai câu lệnh đầu ra với ‘Lệnh gọi hàm trước’. Câu lệnh đầu ra đầu tiên sẽ trả về số chỉ mục trước Số chỉ mục 3 có một số giá trị được lưu trữ trong đó. Trong trường hợp của chúng tôi, chỉ mục trước chỉ số 3 là 2. Do đó, 2 sẽ là đầu ra của câu lệnh đầu ra đầu tiên.
Trong câu lệnh đầu ra thứ hai, chúng tôi đã gọi hàm Trước và cung cấp nó làm đầu vào cho đối tượng tập hợp.
var_nt(var_nt.PRIOR(3))
Công cụ Oracle sẽ thực thi hàm Collection trước (chúng ta hãy gọi nó là phần 1) và sử dụng kết quả từ phần 1, sau đó nó sẽ thực thi đối tượng collection (hãy gọi nó là phần 2) và tạo ra kết quả cuối cùng sẽ là 18 trong trường hợp của chúng tôi. Hãy tiếp tục, sao chép mã và thử tự thực thi.
Điều gì sẽ xảy ra nếu chúng tôi xóa Chỉ mục thấp nhất trước đó khỏi bảng lồng nhau?
Vì vậy, bây giờ câu hỏi là, điều gì sẽ xảy ra nếu bạn xóa Chỉ mục thấp nhất trước đó là 2 trong mã của chúng tôi. Trong trường hợp đó, kết quả chắc chắn sẽ không giống nhau. Hàm trước trả về chỉ số thấp nhất trước đó. Nhưng Chỉ mục đó phải chứa một số giá trị.
Hãy thử nó cho mình. Đây là mã.
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); BEGIN var_nt.DELETE(2); dbms_output.put_line('Index prior to index 3 is '||var_nt.PRIOR(3)); dbms_output.put_line('Value before 3rd Index is '||var_nt(var_nt.PRIOR(3))); END; /
Ví dụ về Phương pháp Thu thập Tiếp theo.
Bạn có thể sử dụng phương pháp Bộ sưu tập PL / SQL Tiếp theo giống như bạn đã sử dụng hàm Trước trong đoạn mã trên. Phương thức thu thập NEXT trả về giá trị từ chỉ mục cao hơn tiếp theo. Đây là ví dụ
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); BEGIN dbms_output.put_line('Next Higher Index to index 3 is '||var_nt.NEXT(3)); dbms_output.put_line('Value after 3rd Index is '||var_nt(var_nt.NEXT(3))); END; /
Cả hai ví dụ gần như giống nhau ngoại trừ lệnh gọi hàm thu. Trong phần thực thi của khối PL / SQL này, chúng ta lại có hai câu lệnh đầu ra. Câu lệnh đầu ra đầu tiên sẽ trả về số chỉ mục không trống tiếp theo trong khi câu lệnh thứ hai sẽ trả về dữ liệu được lưu trữ trong chỉ mục đó. Hoạt động của cả hai câu lệnh này sẽ giống như chúng ta đã thảo luận ở trên. Hãy tiếp tục và sao chép mã và xem kết quả.
Đó là hướng dẫn chi tiết về phương pháp Thu thập PL / SQL Tiếp theo và Trước đó. 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. Để chia sẻ blog này trên Facebook của bạn, Bấm vào đây và cho twitter Bấm vào đây.
Cảm ơn và chúc một ngày tốt lành!