最好的方法是使用游标变量,通常称为参考游标。这基本上是一个指向结果集的指针。Ref Cursor 的优点是我们可以改变 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 打开 Ref Cursors,这是一种强大的技术。
阅读文档以了解更多信息。