Điều khoản thu thập hàng loạt với câu lệnh FETCH INTO
Trong hướng dẫn trước, chúng tôi đã quản lý để nén nhiều công tắc ngữ cảnh thành một công tắc duy nhất bằng cách sử dụng PL / SQL Bulk Collect với câu lệnh SELECT-INTO. Câu lệnh SELECT-INTO là một truy vấn chuẩn SQL có nghĩa là nhà phát triển không có nhiều quyền kiểm soát việc thực thi câu lệnh.
Nếu chúng ta nói về hiệu suất truy vấn, chúng ta không thể đi xa hơn với câu lệnh SELECT-INTO. Hãy xem cách chúng tôi có thể khắc phục tất cả những thiếu sót này của câu lệnh SELECT-INTO.
Trong blog này, bạn sẽ học cách sử dụng mệnh đề Thu thập hàng loạt với câu lệnh FETCH-INTO của một con trỏ rõ ràng. Vì các câu lệnh FETCH là một phần của vòng đời con trỏ, do đó cần phải có kiến thức làm việc về con trỏ rõ ràng để hiểu rõ hơn về hướng dẫn này. Tương tự, bạn có thể xem hướng dẫn về cách tạo con trỏ rõ ràng trong cơ sở dữ liệu Oracle.
Tại sao chúng ta nên sử dụng mệnh đề Thu thập hàng loạt với câu lệnh FETCH INTO?
Như đã đề cập trong blog trước bất cứ khi nào chúng ta sử dụng Bulk-Collect với câu lệnh SELECT-INTO, công cụ thời gian chạy sử dụng con trỏ ngầm để xử lý tác vụ. Nhưng nếu chúng ta sử dụng Bulk Collect với câu lệnh FETCH-INTO thì công cụ thời gian chạy sẽ sử dụng con trỏ rõ ràng để xử lý tác vụ.
Một con trỏ rõ ràng luôn giúp chúng tôi kiểm soát trước các truy vấn SQL tiêu chuẩn của chúng tôi. Ví dụ:với một con trỏ rõ ràng, chúng ta có thể kiểm soát thời điểm tìm nạp các bản ghi hoặc số lượng bản ghi chúng ta muốn truy xuất cùng một lúc, tuy nhiên điều này không thể thực hiện được trong trường hợp câu lệnh SELECT-INTO.
Cú pháp của câu lệnh Bulk Collect with Fetch-Into là gì?
Tương tự như câu lệnh SELECT-INTO, mệnh đề thu thập số lượng lớn hoạt động như một thuộc tính cho câu lệnh FETCH-INTO. Đây là cú pháp
FETCH <cursor_name> BULK COLLECT INTO <plsql_collection>;
Câu lệnh FETCH là một phần của con trỏ rõ ràng. Nếu bạn cố gắng thực thi chúng mà không khai báo con trỏ mẹ của chúng thì bạn sẽ gặp lỗi. Cũng luôn nhớ rằng tập hợp PL / SQL là cấu trúc được hỗ trợ duy nhất cho thu thập số lượng lớn.
Ví dụ:Cách sử dụng PL / SQL Bulk Collect với câu lệnh FETCH-INTO trong Cơ sở dữ liệu Oracle.
SET SERVEROUTPUT ON; DECLARE --Create an explicit cursor CURSOR exp_cur IS SELECT first_name FROM employees; --Declare collection for holding the data TYPE nt_fName IS TABLE OF VARCHAR2 (20); fname nt_fName; BEGIN OPEN exp_cur; LOOP FETCH exp_cur BULK COLLECT INTO fname; EXIT WHEN fname.count=0; --Print data FOR idx IN fname.FIRST.. fname.LAST LOOP DBMS_OUTPUT.PUT_LINE (idx||' '||fname(idx) ); END LOOP; END LOOP; CLOSE exp_cur; END; /
Tôi đã giải thích chi tiết từng dòng của toàn bộ mã này trong video hướng dẫn trên kênh YouTube của tôi. Bạn có thể xem hướng dẫn này.
Vì trong đoạn mã này, chúng tôi đã sử dụng mệnh đề Bulk Collect với câu lệnh tìm nạp vào, điều đó có nghĩa là việc chuyển đổi ngữ cảnh sẽ không thành vấn đề. Như chúng ta biết, điều khoản thu thập số lượng lớn nén nhiều công tắc thành một công tắc duy nhất để không có cổ chai hiệu suất cao hơn.
Nhưng nó có nghĩa là mã này đã được tối ưu hóa tốt và không cần tối ưu hóa thêm không? Hay đối với vấn đề đó Hiệu suất truy vấn sẽ không bao giờ là vấn đề đối với chúng tôi trong tương lai?
Hãy theo dõi, để có câu trả lời cho tất cả những câu hỏi này cũng như tìm hiểu cách chúng tôi có thể tối ưu hóa hơn nữa chương trình PL / SQL này.
Hy vọng bạn thích blog này. Nếu bạn có bất kỳ nghi ngờ hoặc câu hỏi nào hoặc bạn nghĩ rằng tôi đã quên đề cập điều gì đó trong blog này thì hãy viết thư cho tôi trên trang Facebook hoặc Twitter của tôi. Cảm ơn và chúc một ngày tốt lành!