Si GetQuestions
es una función que devuelve un refcursor, que parece ser lo que tiene en la versión de SQL Server, entonces puede hacer algo como esto:
select * from table(MyPackage.GetQuestions('OMG Ponies'));
O si lo necesita en un bloque PL/SQL, puede usar la misma selección en un cursor.
También puede hacer que la función produzca el dbms_output
declaraciones en su lugar para que siempre estén disponibles para la depuración, aunque eso agrega un poco de sobrecarga.
Editar
Hmmm, no estoy seguro de que sea posible cast()
el refcursor devuelto a un tipo utilizable, a menos que esté dispuesto a declarar su propio tipo (y una tabla de ese tipo) fuera del paquete. Sin embargo, puede hacer esto, solo para volcar los resultados:
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;
Y puede usar el resultado de la llamada en otro procedimiento o función; es solo llegar fuera de PL/SQL que parece ser un poco complicado.
Editado para agregar: Con este enfoque, si se trata de un procedimiento, puede hacer esencialmente lo mismo:
var r refcursor;
exec mypackage.getquestions(:r, 'OMG Ponies');
print r;