Hvis GetQuestions
er en funktion, der returnerer en refcursor, som ser ud til at være det, du har i SQL Server-versionen, så er du måske i stand til at gøre noget som dette:
select * from table(MyPackage.GetQuestions('OMG Ponies'));
Eller hvis du har brug for det i en PL/SQL-blok, kan du bruge det samme valg i en markør.
Du kan også få funktionen til at producere dbms_output
sætninger i stedet, så de altid er tilgængelige til fejlretning, selvom det tilføjer lidt ekstra omkostninger.
Rediger
Hmmm, ikke sikkert det er muligt at cast()
den returnerede refcursor til en brugbar type, medmindre du er villig til at erklære din egen type (og en tabel af den type) uden for pakken. Du kan dog gøre dette, bare for at dumpe resultaterne:
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;
Og du kan bruge resultatet af opkaldet i en anden procedure eller funktion; det er bare at komme til det uden for PL/SQL, der ser ud til at være lidt vanskeligt.
Redigeret for at tilføje: Med denne tilgang, hvis det er en procedure, kan du stort set gøre det samme:
var r refcursor;
exec mypackage.getquestions(:r, 'OMG Ponies');
print r;