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

Bagaimana cara mengambil kursor referensi Oracle ke dalam variabel tabel?

Nama variabel dalam kode di atas menyesatkan Anda. Variabel Anda outtable ada di table Tipe. Tidak mungkin mengambil data rekaman ke dalam tabel rekaman, tetapi Anda dapat mengambilnya ke dalam rekaman itu sendiri.

DECLARE 
    REFCUR SYS_REFCURSOR;   
    TYPE RECORDTYPE IS RECORD (COL1 NUMBER, COL2  VARCHAR(100));
    outtable RECORDTYPE; 
BEGIN 
    SP_OUT_RefCur_PARAM(REFCUR);
    LOOP
        FETCH REFCUR INTO outtable;
        EXIT WHEN REFCUR%NOTFOUND;
        dbms_output.put_line(outtable.col1);
    END LOOP;
    CLOSE REFCUR;
END;

Pembaruan: Jika Anda ingin mengambil semua data untuk kinerja yang lebih baik, aplikasi Anda perlu menggunakan pernyataan BULK COLLECT:

DECLARE 
    REFCUR SYS_REFCURSOR;   
    TYPE RECORDTYPE IS
        RECORD (COL1 NUMBER, COL2  VARCHAR(100));
    TYPE TABLETYPE IS
        TABLE OF REFTABLETYPE
        INDEX BY PLS_INTEGER;
    outtable TABLETYPE; 
BEGIN 
    SP_OUT_RefCur_PARAM(REFCUR);
    LOOP
        FETCH REFCUR INTO BULK COLLECT outtable;
        EXIT WHEN outtable.COUNT = 0;

        FOR indx IN 1 .. outtable.COUNT 
        LOOP
            dbms_output.put_line(outtable(indx).col1);;
        END LOOP;
    END LOOP;
    CLOSE REFCUR;
END;

Catatan:konsumsi memori dengan pernyataan BULK jauh lebih banyak daripada tanpa.

Tetapi jika Anda hanya mengambil dan memproses baris - baris pada suatu waktu tidak perlu di BULK pernyataan, cukup gunakan kursor FOR LOOP . (Tanya Tom )



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle - lebih banyak kueri dalam satu hasil

  2. gabung dalam dengan grup dengan ekspresi di Oracle sql

  3. Tangkap nilai yang memicu DUP_VAL_ON_INDEX

  4. SQLPlus mencoba menjatuhkan paket dua kali

  5. Bagaimana mengatasi ORA-04063:lihat SYS.ALL_QUEUE_TABLES memiliki kesalahan?