sql >> Base de Datos >  >> RDS >> Oracle

¿Cómo obtener el cursor de referencia de Oracle en la variable de la tabla?

El nombre de la variable en el código anterior lo engañó. Tu variable outtable está en table escribe. No es posible obtener datos de registros en la tabla de registros, pero puede obtenerlos en el registro mismo.

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;

Actualización: Si desea obtener todos los datos para un mejor rendimiento de su aplicación, debe usar la instrucción 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;

Nota:el consumo de memoria con la sentencia BULK es mucho mayor que sin ella.

Pero si solo está obteniendo y procesando las filas, una fila a la vez no hay necesidades en BULK declaración, simplemente use el cursor FOR LOOP . (Pregúntale a Tom )