Se
GetQuestions
é uma função que retorna um refcursor, que parece ser o que você tem na versão do SQL Server, então você pode fazer algo assim:select * from table(MyPackage.GetQuestions('OMG Ponies'));
Ou se você precisar dele em um bloco PL/SQL, poderá usar o mesmo select em um cursor.
Você também pode fazer com que a função produza o
dbms_output
em vez disso, para que estejam sempre disponíveis para depuração, embora isso acrescente um pouco de sobrecarga. Editar
Hmmm, não tenho certeza se é possível
cast()
o refcursor retornado para um tipo utilizável, a menos que você queira declarar seu próprio tipo (e uma tabela desse tipo) fora do pacote. Você pode fazer isso, porém, apenas para despejar os 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;
E você pode usar o resultado da chamada em outro procedimento ou função; é só chegar fora do PL/SQL que parece ser um pouco complicado.
Editado para adicionar: Com essa abordagem, se for um procedimento, você pode fazer essencialmente a mesma coisa:
var r refcursor;
exec mypackage.getquestions(:r, 'OMG Ponies');
print r;