これを行う最良の方法は、カーソル変数(より一般的には参照カーソルと呼ばれる)を使用することです。これは基本的に結果セットへのポインタです。参照カーソルの利点は、次のようにselectステートメントを変更できることです。
create or replace package student_utils is
-- a hard-types ref cursor
type stud_cur is ref cursor return students%rowtype;
function get_students
( p_sid in students.sid%type := null )
return stud_cur;
end;
私はあなたがコードをどのように使用するつもりであるかについていくつかの推測をしたことに注意してください。パッケージを使用すると、ハードタイプの参照カーソルを定義できます。つまり、STUDENTSテーブルの射影に一致するクエリにのみ使用できます。(実際のSTUDENTS表がない場合は、ビューを使用するか、代わりにPl / SQLレコードを定義できます。)
create or replace package body student_utils is
function get_students
( p_sid in students.sid%type := null )
return stud_cur
is
return_value stud_cur;
begin
if p_sid is null
then
open return_value for
select * from m_viewallStudents;
else
open return_value for
select * from m_viewStudent
where sid = p_sid;
end if;
return return_value;
end;
end;
これらのクエリはハードコーディングされていますが、強力な手法である動的SQLを使用して参照カーソルを開くこともできます。
詳細については、ドキュメントをお読みください。