Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Memilih objek Oracle dengan koleksi objek tanpa pengumpulan massal

Anda memiliki beberapa opsi di sini. Anda dapat membuka kueri Anda sebagai kursor eksplisit dan kemudian FETCH...BULK COLLECT INTO koleksi yang sesuai; anda dapat menggunakan EXECUTE IMMEDIATE...BULK COLLECT INTO; atau, seperti yang Anda katakan tidak ingin Anda dengar, Anda dapat menggunakan DBMS_SQL.

Untuk menggunakan EXECUTE IMMEDIATE...BULK COLLECT, Anda akan menggunakan sesuatu seperti

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 di sini

dokumen di sini (dari 10.1 - penulisan yang lebih baik daripada versi IMO yang lebih baru)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Saya terus mendapatkan kesalahan di sebelah pengembalian VARCHAR(4)

  2. Mengapa kita tidak dapat menggunakan kursor ref yang kuat dengan Pernyataan SQL dinamis?

  3. Bagaimana cara terhubung di java sebagai SYS ke Oracle?

  4. Apakah karakter garis miring ini dalam skrip Oracle PL/SQL merupakan kesalahan?

  5. SQL pilih untuk semua catatan yang mungkin memiliki nilai tertentu