sql >> Databáze >  >> RDS >> Oracle

Jak načíst referenční kurzor Oracle do proměnné tabulky?

Název proměnné ve výše uvedeném kódu vás vyvedl z omylu. Vaše proměnná outtable je v table typ. Není možné načíst data záznamu do tabulky záznamů, ale můžete je načíst do samotného záznamu.

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;

Aktualizace: Pokud chcete načíst všechna data pro lepší výkon vaší aplikace, musíte použít příkaz 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;

Poznámka:Spotřeba paměti s příkazem BULK je mnohem větší než bez něj.

Ale pokud právě načítáte a zpracováváte řádky – jeden řádek po druhém není potřeba BULK stačí použít kurzor FOR LOOP . (Zeptejte se Toma )



  1. Varování Python a MySQLdb

  2. Jak počítat položky podle kategorie?

  3. Získávání dat z více tabulek do jednoho řádku při zřetězení některých hodnot

  4. Vzdálené připojení MySQL [ne jako obvykle]