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

Lưu trữ kết quả của truy vấn trừ với nhiều cột trong một biến trong Oracle PL / SQL

SYS.ODCINUMBERLIST chỉ là một danh sách mà mỗi bản ghi có một số duy nhất. Bạn cần sử dụng loại bản ghi mới để lưu trữ nhiều trường trong mỗi hàng.

Bạn có thể xác định loại bản ghi để sử dụng thay cho SYS.ODCINUMBERLIST . Nhưng tôi có khuynh hướng di chuyển SELECT là một con trỏ rõ ràng, để bạn có thể xác định một kiểu mới là con trỏ %ROWTYPE . Bằng cách đó, loại bản ghi của bạn và câu lệnh select luôn nhất quán, nhưng nó sẽ thay đổi cấu trúc mã của bạn một chút.

Đây là cách tiếp cận đó:

DECLARE 

  CURSOR c_select IS
      SELECT project_id, project_name
      FROM 
        (
          SELECT t1.project_id, t1.project_name FROM table_one t1
          MINUS
          SELECT t2.project_id, t2.project_name FROM table_two t2 );

  TYPE l_missing_row_list_typ IS TABLE OF c_select%ROWTYPE;
  l_missing_row_list l_missing_row_list_typ;
  
BEGIN
  OPEN c_select;
  FETCH c_select BULK COLLECT INTO l_missing_row_list;
  CLOSE c_select;
  
  FORALL i IN l_missing_row_list.FIRST..l_missing_row_list.LAST
    INSERT INTO table_two VALUES ( l_missing_row_list(i).project_id, l_missing_row_list(i).project_name );
    
  COMMIT;
  
  -- Values are now inserted and you have the list of IDs in l_missing_row_list to add to your email.
END;

Một lưu ý về BULK COLLECT (cả ở đây và trong bài đăng gốc của bạn) - dữ liệu bạn đang thu thập hàng loạt được lưu trữ trong bộ nhớ PGA. Vì vậy, không sử dụng mã này vì nếu có thay đổi số lượng bản ghi mới sẽ không hợp lý (có thể hơn vài nghìn).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. JDBC Metada truy xuất thông tin Ràng buộc

  2. PLS-00103:Gặp phải biểu tượng cuối tệp khi mong đợi một trong những điều sau:;

  3. Bảng tạm thời cục bộ trong Oracle 10 (đối với phạm vi của Thủ tục được lưu trữ)

  4. Cách tiếp cận đúng để khởi tạo Trình xử lý JMS không đồng bộ và để nó chạy vô hạn

  5. Trong trình điều khiển Oracle JDBC, điều gì xảy ra với múi giờ khi bạn ghi ngày Java vào cột TIMESTAMP?