Se GetQuestions
è una funzione che restituisce un refcursor, che sembra essere quello che hai nella versione di SQL Server, quindi potresti essere in grado di fare qualcosa del genere:
select * from table(MyPackage.GetQuestions('OMG Ponies'));
Oppure, se ne hai bisogno in un blocco PL/SQL, puoi utilizzare la stessa selezione in un cursore.
Puoi anche fare in modo che la funzione produca il dbms_output
istruzioni invece in modo che siano sempre disponibili per il debug, anche se ciò aggiunge un po' di sovraccarico.
Modifica
Hmmm, non sono sicuro che sia possibile cast()
il riferimento restituito a un tipo utilizzabile, a meno che tu non sia disposto a dichiarare il tuo tipo (e una tabella di quel tipo) al di fuori del pacchetto. Puoi farlo solo per scaricare i risultati:
create package mypackage as
function getquestions(user in varchar2) return sys_refcursor;
end mypackage;
/
create package body mypackage as
function getquestions(user in varchar2) return sys_refcursor as
r sys_refcursor;
begin
open r for
/* Whatever your real query is */
select 'Row 1' col1, 'Value 1' col2 from dual
union
select 'Row 2', 'Value 2' from dual
union
select 'Row 3', 'Value 3' from dual;
return r;
end;
end mypackage;
/
var r refcursor;
exec :r := mypackage.getquestions('OMG Ponies');
print r;
E puoi usare il risultato della chiamata in un'altra procedura o funzione; è solo arrivarci al di fuori di PL/SQL che sembra essere un po' complicato.
Modificato per aggiungere: Con questo approccio, se si tratta di una procedura, puoi fare essenzialmente la stessa cosa:
var r refcursor;
exec mypackage.getquestions(:r, 'OMG Ponies');
print r;