2017-12-05 3 views
0

ich über ein Verfahren, dass ein OUT sys_refcursor hat:Run-Abfrage gegen eine andere Prozedur, die einen Cursor zurückgibt

CREATE OR REPLACE PROCEDURE get_detail_data(RC1   IN OUT sys_REFCURSOR) 
IS ... 

nun in einem anderen ein Verfahren, ich versuche, einige Statistiken gegen den Ausgang dieses Verfahren zu berechnen so kann ich sie in eine Tabelle einfügen:

CREATE OR REPLACE PROCEDURE load_stats 
AS 
cur_detail SYS_REFcursor; 

BEGIN 
    -- Load the data from the "get_detail_data" procedure 
    get_detail_data(cur_detail); 

    -- Now lets calculate some stats against that detail data and insert 
    insert into stats_table (
    select 
     id_number, sum(amount) 
    from table(cur_detail) -- obviously this is not valid 
) 

END; 

Wie kann ich eine Abfrage für eine sys_refcursor Dataset ausführen und diese Ergebnisse in einer anderen Tabelle einfügen?

Antwort

0

können Sie starten von einem offenen Cursor wie folgt holen:

LOOP -- Fetches 2 columns into variables 
    FETCH cur_detail INTO v_id_number, v_amount; 
    EXIT WHEN cv%NOTFOUND; 
    [... insert etc ...] 
    END LOOP; 

Ich würde vorschlagen, die Aggregation innerhalb der Cursor zu tun, sonst müssen Sie durch id_number und Aggregat innerhalb der Schleife, um zu bestellen, durch id_number zu brechen.

Verwandte Themen