sql >> Databasteknik >  >> RDS >> Oracle

Hur hämtar man Oracle-referensmarkören till tabellvariabeln?

Namnet på variabeln i koden ovan har vilselett dig. Din variabel outtable finns i table typ. Det är inte möjligt att hämta postdata till posttabellen, men du kan hämta den till posten själv.

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;

Uppdatering: Om du vill hämta all data för bättre prestanda för din applikation måste du använda BULK COLLECT-satsen:

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;

Notera:minnesförbrukningen med BULK-satsen är mycket mer än utan.

Men om du bara hämtar och bearbetar raderna - en rad i taget finns det inga behov i BULK uttalande, använd bara markören FOR LOOP . (Fråga Tom )



  1. MySQL MIN() och MAX() med LIMIT

  2. MS Access:Fördelar och nackdelar

  3. Vad är Oracle Joins (Sql Joins)?

  4. Sortera chars i varchar2 alfabetiskt