Ако GetQuestions
е функция, връщаща рекурсор, който изглежда е това, което имате във версията на SQL Server, тогава по-скоро може да сте в състояние да направите нещо подобно:
select * from table(MyPackage.GetQuestions('OMG Ponies'));
Или ако имате нужда от него в PL/SQL блок, тогава можете да използвате същия избор в курсора.
Можете също така да накарате функцията да генерира dbms_output
вместо това оператори, така че те винаги да са достъпни за отстраняване на грешки, въпреки че това добавя малко допълнителни разходи.
Редактиране
Хммм, не съм сигурен, че е възможно да се cast()
върнатият рекурсор към използваем тип, освен ако не желаете да декларирате свой собствен тип (и таблица от този тип) извън пакета. Можете обаче да направите това, само за да изхвърлите резултатите:
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;
И можете да използвате резултата от повикването в друга процедура или функция; просто стигането до него извън PL/SQL изглежда е малко сложно.
Редактирано за добавяне: С този подход, ако това е процедура, можете да направите по същество същото нещо:
var r refcursor;
exec mypackage.getquestions(:r, 'OMG Ponies');
print r;