包遊標即在包頭聲明部分定義遊標頭,即遊標的定義,把實現部分留給包體來完成,調用時可以通過包來調用,這樣方便共享遊標,實際實現功能類似視圖。
-
示例
包頭定義
create or replace package mypackage is
cursor cur_employee(deptno in employee.departmentno%type) return employee%rowtype; --遊標的定義一定要包含return returnType
end;
包體定義
create or replace package body mypackage is
cursor cur_employee(deptno in employee.departmentno%type) return employee%rowtype
is select * from employee where departmentno=deptno;
end;
調用
declare
item employee%rowtype;
begin
if mypackage.cur_employee%isopen then --因爲包遊標作爲共享遊標,一定要用完關閉,用前判斷是否已打開
close mypackage.cur_employee;
end if;
open mypackage.cur_employee('005');
loop
fetch mypackage.cur_employee into item;
exit when mypackage.cur_employee%notfound;
dbms_output.put_line(item.employeename);
end loop;
close mypackage.cur_employee; ---用完關閉
end;
執行結果
黃奮
王加紅
章常勇
李紅