游標定義和使用需要4個步驟:
1、聲明游標 myCur Sys_Refcursor;
2、打開游標 open myCur for select * from students;
3、提取數據 可以使用fetch也可以使用for循環;
4、關閉游標 close myCur;
fetch myCur into name,age;
exit when myCur%NOTFOUND;
if myCur%found then
dbms_output.put_line('讀取的數據:學生姓名為:' || name || '元, 年齡為: ' ||age);
end if;
end loop;
使用for循環:
for myCur_record in myCur loop
dbms_output.put_line('讀取的數據:學生姓名為:' || name || '元, 年齡為: ' ||age);
end loop;
此時myCur_record 為隱含定義的記錄變量,循環的執行次數與游標取得的數據的行數一致。
用於游標判斷的4個屬性:
1. %ROWCOUNT 整型 獲得FETCH語句返回的數據行數
2. %FOUND 布爾型 最近的FETCH語句返回一行數據則為真,否則為假
3. %NOTFOUND 布爾型 與%FOUND屬性返回值相反
4. %ISOPEN 布爾型 游標已經打開時值為真,否則為假 。
使用sys_refcursor游標返回記錄集:
create or replace procedure calprice(resCur out Sys_Refcursor) is
myCur Sys_Refcursor;
begin
open myCur for
select * from student;
resCur := myCur;
此時將結果集保存在resCur游標中,其他函數或存儲過程調用的時候再使用fetch或for語句提取記錄。