Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Como buscar o cursor de referência do Oracle na variável de tabela?


O nome da variável no código acima o enganou. Sua variável outtable está na table modelo. Não é possível buscar dados de registro na tabela de registros, mas você pode buscá-los no próprio registro.
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;

Atualização: Se você deseja buscar todos os dados para um melhor desempenho do seu aplicativo, você precisa usar a instrução 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:o consumo de memória com a instrução BULK é muito maior do que sem.

Mas se você está apenas buscando e processando as linhas - uma linha de cada vez, não há necessidade em BULK instrução, basta usar o cursor FOR LOOP . (Pergunte ao Tom )