Jika GetQuestions
adalah fungsi yang mengembalikan refkursor, yang tampaknya seperti yang Anda miliki dalam versi SQL Server, maka Anda mungkin dapat melakukan sesuatu seperti ini:
select * from table(MyPackage.GetQuestions('OMG Ponies'));
Atau jika Anda membutuhkannya di blok PL/SQL maka Anda dapat menggunakan pilihan yang sama di kursor.
Anda juga dapat memiliki fungsi yang menghasilkan dbms_output
sebagai gantinya sehingga mereka selalu tersedia untuk debugging, meskipun itu menambahkan sedikit overhead.
Sunting
Hmmm, tidak yakin itu mungkin untuk cast()
refkursor yang dikembalikan ke tipe yang dapat digunakan, kecuali jika Anda bersedia mendeklarasikan tipe Anda sendiri (dan tabel dari tipe itu) di luar paket. Anda dapat melakukan ini, hanya untuk membuang hasilnya:
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;
Dan Anda dapat menggunakan hasil panggilan dalam prosedur atau fungsi lain; hanya untuk melakukannya di luar PL/SQL yang tampaknya sedikit rumit.
Diedit untuk menambahkan: Dengan pendekatan ini, jika ini adalah prosedur, pada dasarnya Anda dapat melakukan hal yang sama:
var r refcursor;
exec mypackage.getquestions(:r, 'OMG Ponies');
print r;