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

Cách sử dụng mệnh đề thu thập hàng loạt với câu lệnh SELECT INTO trong cơ sở dữ liệu Oracle

Mệnh đề thu thập hàng loạt với câu lệnh SELECT INTO

Chào mừng bạn đến với hướng dẫn thứ hai trong loạt bài PL / SQL Bulk Collect, nơi chúng ta sẽ học cách sử dụng mệnh đề BULK COLLECT với câu lệnh SELECT-INTO.

Chuyển đổi ngữ cảnh là tốt nhưng chỉ khi chúng có số lượng thấp. Số lượng chuyển mạch ngữ cảnh tăng lên có thể gây ra các vấn đề như hiệu suất truy vấn kém. Chi phí này do công tắc ngữ cảnh gây ra có thể dễ dàng được kiểm soát nếu chúng ta có thể nén chúng. Đây chính xác là những gì bạn sẽ học trong hướng dẫn này.

Bạn có thể tìm hiểu thêm về CHỌN VÀO tại đây .

Khi nào chúng ta nên sử dụng Thu thập hàng loạt với câu lệnh Chọn vào?

Khi bạn chắc chắn rằng kết quả trả về của câu lệnh SELECT là nhỏ thì bạn nên sử dụng mệnh đề Thu thập hàng loạt với câu lệnh Chọn-Vào. Nếu không, điều khoản thu thập số lượng lớn của bạn sẽ làm cho câu lệnh Select-Into của bạn trở thành một con quái vật ăn mòn bộ nhớ. Do đó, nó sẽ làm chậm hiệu suất của cơ sở dữ liệu của bạn.

Tôi nên làm gì nếu câu lệnh SELECT của tôi đang truy xuất một số lượng lớn các hàng?

Bạn luôn có thể sử dụng mệnh đề LIMIT cùng với Thu thập hàng loạt để giới hạn số hàng được tìm nạp từ cơ sở dữ liệu. Nhưng điều này chỉ có thể thực hiện được khi chúng ta đang sử dụng mệnh đề Thu thập hàng loạt với Con trỏ PL / SQL. Tuy nhiên, chúng ta sẽ thảo luận chi tiết về vấn đề này trong hướng dẫn tiếp theo.

Tại sao chúng tôi không thể giới hạn dữ liệu được tìm nạp bằng Thu thập hàng loạt trong câu lệnh SELECT-INTO?

Khi chúng tôi sử dụng mệnh đề Thu thập hàng loạt với câu lệnh SELECT-INTO, mệnh đề này sử dụng ngầm định con trỏ để thực hiện nhiệm vụ xử lý dữ liệu hàng loạt. Tuy nhiên, điều khoản giới hạn chỉ có thể được sử dụng với mệnh đề Thu thập hàng loạt, khi điều khoản thứ hai đang sử dụng Con trỏ rõ ràng để xử lý dữ liệu.

Khi nào thì Điều khoản thu thập hàng loạt sử dụng Con trỏ ngầm và khi nào thì Con trỏ rõ ràng?

Nếu chúng ta đang sử dụng Mệnh đề thu thập hàng loạt với một câu lệnh SQL chẳng hạn như SELECT-INTO thì nó sử dụng một con trỏ ngầm. Mặt khác, bất cứ khi nào chúng tôi sử dụng mệnh đề Bulk Collect với câu lệnh FETCH, nó sẽ sử dụng một con trỏ rõ ràng.

Tôi khuyên bạn nên đọc cách tạo con trỏ rõ ràng để tìm hiểu thêm về câu lệnh FETCH.

Chúng tôi có thể lưu trữ kết quả được trả về bởi mệnh đề thu thập số lượng lớn vào một biến kiểu dữ liệu nguyên thủy không?

Không, hiện tại PL / SQL Collections là kiểu dữ liệu hỗ trợ duy nhất cho Xử lý Dữ liệu Hàng loạt với Điều khoản Thu thập Hàng loạt trong Cơ sở dữ liệu Oracle. Trong trường hợp nếu bạn cố gắng lưu trữ dữ liệu được truy xuất bằng mệnh đề Bulk Collect vào một biến kiểu dữ liệu như Char, Number hoặc Varchar2, bạn sẽ gặp lỗi sẽ đọc như sau:

“PLS-00497:Không thể kết hợp giữa một hàng và nhiều hàng (BULK) trong danh sách INTO”

Định nghĩa của Báo cáo thu thập hàng loạt
Câu lệnh “Bulk Collect Into” chọn nhiều dữ liệu từ một cột và lưu trữ nó vào SQL Collection.

Cú pháp của mệnh đề Thu thập hàng loạt với câu lệnh Chọn vào.

Cú pháp để sử dụng Điều khoản thu thập hàng loạt PL / SQL với câu lệnh Select-Into trong Cơ sở dữ liệu Oracle như sau:

SELECT column_list
 BULK COLLECT INTO collection_datatype_name 
FROM table_name 
WHERE <where clause> 
ORDER BY <column list>;

Ở đâu:

Danh sách cột là danh sách các cột mà bạn muốn truy xuất dữ liệu.

Tên loại dữ liệu bộ sưu tập sẽ là tên của biến thu thập sẽ chứa dữ liệu được trả về bởi mệnh đề thu thập hàng loạt.

Hơn nữa, hãy luôn nhớ mọi cột bạn đã chỉ định để truy xuất dữ liệu phải mang một kiểu dữ liệu thu thập tương ứng để lưu giữ dữ liệu đó. Vì công cụ thời gian chạy PL / SQL luôn lưu trữ dữ liệu được truy xuất từ ​​cột vào bộ sưu tập theo cách song song.

Ví dụ

SELECT column_1, column_2 BULK COLLECT INTO collection_1, collection2 FROM table;

Tại đây, dữ liệu được truy xuất từ ​​cột_1 sẽ được lưu trữ vào bộ sưu tập_1 và dữ liệu từ cột_2 vào bộ sưu tập_2 tự động.

Tên bảng có thể là tên của bất kỳ bảng nào bạn muốn truy xuất dữ liệu.

Tiếp theo là chúng tôi có mệnh đề WHERE và ORDER BY là tùy chọn nhưng nếu bạn muốn, bạn có thể sử dụng chúng.

Bây giờ chúng ta đã thảo luận về cú pháp, hãy làm một ví dụ đơn giản để tìm hiểu cách làm việc với mệnh đề PL / SQL Bulk Collect với câu lệnh SELECT INTO trong Cơ sở dữ liệu Oracle.

SET SERVEROUTPUT ON;
DECLARE
    TYPE nt_fName   IS TABLE OF VARCHAR2 (20);
    TYPE nt_lName   IS TABLE OF VARCHAR2 (20);
    
    fname   nt_fName;
    lName   nt_lName;
BEGIN
    SELECT first_name, last_name 
        BULK COLLECT INTO fName, lName 
    FROM employees; 
        
        --Print values from the collection--
    FOR idx IN 1..fName.COUNT
    LOOP
        DBMS_OUTPUT.PUT_LINE (idx||' - '||fName (idx) ||' '||lName (idx));
    END LOOP;
END;
/

Giải thích Ví dụ

Ở đây chúng tôi có một đoạn mã rất đơn giản để trình bày cách sử dụng Điều khoản thu thập hàng loạt với câu lệnh Select-Into. Trong phần khai báo của đoạn mã này, trước tiên chúng ta tạo hai tập hợp kiểu Bảng lồng nhau “nt_fName” &“nt_lName” với các biến tập hợp tương ứng “fName” &“lName”. Trên thực tế, cả hai tập hợp này sẽ được sử dụng để giữ dữ liệu được trả về bởi câu lệnh Select-Into.

Bạn có thể đọc cách tạo bảng lồng nhau tại đây.

Trong phần khai báo, chúng ta có câu lệnh Chọn vào với mệnh đề Thu thập hàng loạt. Hơn nữa, bằng cách sử dụng câu lệnh Select-Into này, chúng tôi đang truy xuất tất cả dữ liệu từ cột Họ và Tên của bảng nhân viên. Và với sự trợ giúp của mệnh đề Thu thập hàng loạt, chúng tôi đang lưu trữ dữ liệu đó vào các bộ sưu tập tương ứng theo cách song song.

Ngoại trừ cùng với câu lệnh Select-Into, chúng tôi còn có "For Loop" đang in dữ liệu của cả hai bộ sưu tập ra màn hình đầu ra.

Phải xem
Hãy nhớ xem video mà tôi đã trình bày cách Điều khoản thu thập hàng loạt nén nhiều công tắc ngữ cảnh thành một và cải thiện hiệu suất của truy vấn. Đây là liên kết.

Đó là phần hướng dẫn giải thích chi tiết các khái niệm về mệnh đề Thu thập số lượng lớn với câu lệnh Select-Into. Trong hướng dẫn này, tôi đã cố gắng trả lời tất cả các câu hỏi mà bạn có thể gặp phải trong kỳ thi Chứng chỉ cũng như trong cuộc phỏng vấn.

Hy vọng bạn thích đọc. Hãy chắc chắn CHIA SẺ blog này với bạn bè trên mạng xã hội của bạn. 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. Biểu thức CASE .. WHEN trong Oracle SQL

  2. Oracle:Tính chênh lệch múi giờ trong HH:MM:SS giữa 2 ngày

  3. Có bất kỳ hàm băm nào trong PL / SQL không?

  4. Hàm TRIM () trong Oracle

  5. sự khác biệt giữa kế hoạch giải thích và kế hoạch thực hiện