GetQuestions
の場合 はrefcursorを返す関数であり、SQL Serverバージョンにあるように見えますが、次のようなことができる場合があります。
select * from table(MyPackage.GetQuestions('OMG Ponies'));
または、PL / SQLブロックで必要な場合は、同じselectをカーソルで使用できます。
関数に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;