sql >> Database teknologi >  >> RDS >> Oracle

Hvordan henter man Oracle-referencemarkøren til tabelvariablen?

Navnet på variabel i koden ovenfor vildledte dig. Din variabel outtable er i table type. Det er ikke muligt at hente postdata ind i tabel med poster, men du kan hente det ind i selve posten.

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;

Opdatering: Hvis du vil hente alle data for bedre ydeevne for din applikation, skal du bruge BULK COLLECT-sætning:

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;

Bemærk:Hukommelsesforbruget med BULK-sætningen er meget mere end uden.

Men hvis du bare henter og behandler rækkerne - en række ad gangen er der ingen behov i BULK sætning, skal du blot bruge markøren FOR LOOP . (Spørg Tom )



  1. Tomcat/Hibernate-forbindelse til MySql mislykkes med kommunikationsforbindelsesfejl og tilladelse nægtet

  2. opdatering x sæt y =null tager lang tid

  3. Sådan får du databasemeddelelse til C++-applikationen

  4. En Ejendomsmægler Data Model