Jeśli GetQuestions
jest funkcją zwracającą refcursor, który wydaje się być tym, co masz w wersji SQL Server, to raczej możesz zrobić coś takiego:
select * from table(MyPackage.GetQuestions('OMG Ponies'));
Lub jeśli potrzebujesz tego w bloku PL/SQL, możesz użyć tego samego wyboru w kursorze.
Możesz również sprawić, by funkcja wytworzyła dbms_output
zamiast tego, są one zawsze dostępne do debugowania, chociaż dodaje to trochę narzutu.
Edytuj
Hmmm, nie jestem pewien, czy można cast()
zwrócony refcursor do typu użytecznego, chyba że chcesz zadeklarować swój własny typ (i tabelę tego typu) poza pakietem. Możesz to zrobić, aby zrzucić wyniki:
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;
I możesz użyć wyniku wywołania w innej procedurze lub funkcji; po prostu dostanie się do tego poza PL/SQL, co wydaje się trochę trudne.
Zmieniono, aby dodać: Dzięki takiemu podejściu, jeśli jest to procedura, możesz zrobić zasadniczo to samo:
var r refcursor;
exec mypackage.getquestions(:r, 'OMG Ponies');
print r;