Als GetQuestions
is een functie die een refcursor retourneert, wat lijkt te zijn wat je hebt in de SQL Server-versie, dan kun je misschien iets als dit doen:
select * from table(MyPackage.GetQuestions('OMG Ponies'));
Of als je het nodig hebt in een PL/SQL-blok, dan kun je dezelfde select in een cursor gebruiken.
U kunt de functie ook de dbms_output
. laten produceren instructies in plaats daarvan zodat ze altijd beschikbaar zijn voor debuggen, hoewel dat een beetje overhead met zich meebrengt.
Bewerken
Hmmm, ik weet niet zeker of het mogelijk is om cast()
de geretourneerde refcursor naar een bruikbaar type, tenzij je bereid bent om je eigen type (en een tabel van dat type) buiten het pakket te declareren. Je kunt dit echter wel doen, gewoon om de resultaten te dumpen:
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;
En u kunt het resultaat van de aanroep gebruiken in een andere procedure of functie; het komt gewoon buiten PL/SQL, dat lijkt een beetje lastig te zijn.
Bewerkt om toe te voegen: Met deze aanpak kun je, als het een procedure is, in wezen hetzelfde doen:
var r refcursor;
exec mypackage.getquestions(:r, 'OMG Ponies');
print r;