Om GetQuestions
är en funktion som returnerar en refcursor, som verkar vara vad du har i SQL Server-versionen, så kanske du snarare kan göra något så här:
select * from table(MyPackage.GetQuestions('OMG Ponies'));
Eller om du behöver det i ett PL/SQL-block kan du använda samma val i en markör.
Du kan också låta funktionen producera dbms_output
uttalanden istället så att de alltid är tillgängliga för felsökning, även om det lägger till lite extra kostnader.
Redigera
Hmmm, inte säker på att det är möjligt att cast()
den returnerade återgången till en användbar typ, såvida du inte är villig att deklarera din egen typ (och en tabell av den typen) utanför paketet. Du kan dock göra detta, bara för att dumpa resultaten:
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;
Och du kan använda resultatet av samtalet i en annan procedur eller funktion; det är bara att komma till det utanför PL/SQL som verkar vara lite knepigt.
Redigerad för att lägga till: Med detta tillvägagångssätt, om det är en procedur, kan du göra i princip samma sak:
var r refcursor;
exec mypackage.getquestions(:r, 'OMG Ponies');
print r;