Wenn GetQuestions
eine Funktion ist, die einen Refcursor zurückgibt, was anscheinend das ist, was Sie in der SQL Server-Version haben, dann können Sie vielleicht eher so etwas tun:
select * from table(MyPackage.GetQuestions('OMG Ponies'));
Oder wenn Sie es in einem PL/SQL-Block brauchen, können Sie dasselbe select in einem Cursor verwenden.
Sie können auch die Funktion dbms_output
erzeugen lassen -Anweisungen, sodass sie immer zum Debuggen verfügbar sind, obwohl dies etwas Overhead hinzufügt.
Bearbeiten
Hmmm, ich bin mir nicht sicher, ob es möglich ist, cast()
zu verwenden den zurückgegebenen Refcursor auf einen verwendbaren Typ, es sei denn, Sie sind bereit, Ihren eigenen Typ (und eine Tabelle dieses Typs) außerhalb des Pakets zu deklarieren. Sie können dies jedoch tun, nur um die Ergebnisse auszugeben:
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;
Und Sie können das Ergebnis des Aufrufs in einer anderen Prozedur oder Funktion verwenden; Es scheint nur etwas schwierig zu sein, außerhalb von PL/SQL darauf zuzugreifen.
Bearbeitet, um hinzuzufügen: Wenn es sich um eine Prozedur handelt, können Sie bei diesem Ansatz im Wesentlichen dasselbe tun:
var r refcursor;
exec mypackage.getquestions(:r, 'OMG Ponies');
print r;