2010-11-03 10 views
5

Ho memorizzato la procedura che esegue un'altra stored procedure più volte. Ho bisogno di unione e dati di ritorno, che ho dopo aver eseguito la seconda procedura.Unione dati da cursori in uno

Posso in qualche modo collegare i dati di più cursori in un altro cursore? È possibile senza tabelle temporanee o tipi di dati simili a tabelle?

MODIFICA: il conteggio del cursore per unione in realtà è n (dove n è 1, 2, 3, ecc., Che rileva con un'altra procedura).

Ad esempio:

CREATE OR REPLACE PROCEDURE proc_data 
(data_out OUT SYS_REFCURSOR 
) IS 
BEGIN 
OPEN data_out FOR SELECT '1' NUM FROM dual; 
END; 
/

CREATE OR REPLACE PROCEDURE proc_result 
(data_out OUT SYS_REFCURSOR 
) IS 
data1 SYS_REFCURSOR; 
data2 SYS_REFCURSOR; 
BEGIN 
PROC_DATA(data1); 
PROC_DATA(data2); 
-- select data1 and data2 into data_out - how? 
END; 
/

SET SERVEROUTPUT ON 

DECLARE 
data_out SYS_REFCURSOR; 
temp_row VARCHAR2(10); 
BEGIN 
PROC_RESULT(data_out); 
    LOOP 
    FETCH data_out INTO temp_row; 
    EXIT WHEN data_out%NOTFOUND; 
    DBMS_OUTPUT.PUT_LINE(temp_row); 
    END LOOP; 
    CLOSE data_out; 
END; 
/

risultato atteso:

--- 
1 
1 

risposta

2

No, non è possibile. C'è a nice discussion su AskTom per quanto riguarda questa domanda, date un'occhiata forse alcune soluzioni alternative fornite lì possono aiutarti.

3

È possibile raggiungere questo obiettivo la creazione di un pipelined function che vi permetterà di fare

select table(PROC_DATA(data1)) union table(PROC_DATA(data2)) 
+0

n essere costante o variabile? –

+0

n - variabile. Questo è stato solo un esempio per spiegare la mia domanda, in veri e propri conteggi dei cursori db che l'unione sta rilevando con un'altra procedura. – ksogor

+2

Quindi è possibile creare dinamicamente la tabella di selezione (PROC_DATA (data1)) tabella unione (PROC_DATA (data2)) (PROC_DATA (data3)) ... query ed eseguirla –

Problemi correlati