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

Làm thế nào để tìm nạp con trỏ tham chiếu Oracle vào biến bảng?

Tên của biến trong đoạn mã trên đã đánh lừa bạn. Biến của bạn outtable nằm trong bảng table loại hình. Không thể tìm nạp dữ liệu bản ghi vào bảng bản ghi, nhưng bạn có thể tìm nạp nó vào chính bản ghi.

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;

Cập nhật: Nếu bạn muốn tìm nạp tất cả dữ liệu để có hiệu suất tốt hơn ứng dụng của mình, bạn cần sử dụng câu lệnh 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;

Lưu ý:mức tiêu thụ bộ nhớ với câu lệnh BULK nhiều hơn là không có.

Nhưng nếu bạn chỉ đang tìm nạp và xử lý các hàng - một hàng tại một thời điểm thì không cần trong BULK câu lệnh, chỉ cần sử dụng con trỏ FOR LOOP . ( Hỏi 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. Truy vấn SQL để đếm các thay đổi của giá trị trong một cột

  2. LISTAGG trong Oracle để trả về các giá trị riêng biệt

  3. Cách biểu diễn khoảng thời gian Oracle trong Java

  4. Hàm tổng hợp sản phẩm ()

  5. Tạo lược đồ SQL từ XML