Если GetQuestions
- это функция, возвращающая рефкурсор, который, по-видимому, является тем, что есть в версии SQL Server, то, скорее всего, вы сможете сделать что-то вроде этого:
select * from table(MyPackage.GetQuestions('OMG Ponies'));
Или, если вам это нужно в блоке PL / SQL, вы можете использовать тот же самый выбор в курсоре.
Вы также можете заставить функцию генерировать операторы dbms_output
, чтобы они всегда были доступны для отладки, хотя это добавляет немного накладных расходов.
Редактировать
Хммм, не уверен, что cast()
можно вернуть возвращаемый refcursor для пригодного для использования типа, если вы не хотите объявить свой собственный тип (и таблицу этого типа) вне пакета. Вы можете сделать это, хотя бы, чтобы вывести результаты:
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;