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

Chọn đối tượng Oracle với bộ sưu tập các đối tượng mà không cần thu thập số lượng lớn

Bạn có một số tùy chọn ở đây. Bạn có thể mở truy vấn của mình dưới dạng con trỏ rõ ràng và sau đó TÌM ... THU THẬP SỐ LƯỢNG LỚN VÀO một bộ sưu tập thích hợp; bạn có thể sử dụng THỰC HIỆN NGAY LẬP TỨC ... THU MUA SỐ LƯỢNG LỚN VÀO; hoặc, như bạn nói rằng bạn không muốn nghe, bạn có thể sử dụng DBMS_SQL.

Để sử dụng EXECUTE NGAY LẬP TỨC ... BULK COLLECT, bạn sẽ sử dụng thứ gì đó giống như

CREATE TABLE DATA_TABLE(FIELD1         NUMBER,
                        FIELD2         VARCHAR2(100));

INSERT INTO DATA_TABLE (FIELD1, FIELD2)
  SELECT 1, 'ONE' FROM DUAL UNION ALL
  SELECT 1, 'TWO' FROM DUAL UNION ALL
  SELECT 2, 'THREE' FROM DUAL UNION ALL
  SELECT 2, 'FOUR' FROM DUAL UNION ALL
  SELECT 3, 'LAST' FROM DUAL;

DECLARE
  TYPE typeCol IS TABLE OF DATA_TABLE%ROWTYPE;
  colVals        typeCol;
  strField_name  VARCHAR2(30) := 'FIELD1';
  nField_val     NUMBER := 2;

  strQuery       VARCHAR2(4000);
BEGIN
  strQuery := 'SELECT * FROM DATA_TABLE WHERE ' || strField_name || '=' || nField_val;

  DBMS_OUTPUT.PUT_LINE(strQuery);

  EXECUTE IMMEDIATE strQuery BULK COLLECT INTO colVals;

  FOR i IN colVals.FIRST..colVals.LAST LOOP
    DBMS_OUTPUT.PUT_LINE(i || ': FIELD1=' || colVals(i).FIELD1 || '  FIELD2=' || colVals(i).FIELD2);
  END LOOP;
END;
/

dbfiddle tại đây

tài liệu tại đây (từ 10.1 - viết tốt hơn phiên bản sau IMO)



  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 chính quy Oracle có dấu gạch nối không cho kết quả tương tự trên Windows như trên Unix

  2. UPSERT vào bảng với tên bảng động

  3. Biểu thức chính quy về Ngày trong Oracle

  4. Làm việc với các sự kiện trong Cơ sở hạ tầng đám mây Oracle Phần 1:khái niệm cơ bản về dịch vụ

  5. Tạo một bảng / chế độ xem phẳng của một tập hợp dữ liệu được xác định theo thứ bậc