最近工作中常常需要使用游標,一般在循環或者需要一條條操作數據的場景下使用。
下面總結兩種常用的游標使用方法:
- FOR 循環游標
- FETCH游標
1.FOR 循環游標
- 定義游標
- 定義游標變量
- 使用for循環來使用這個游標
declare
--類型定義
cursor c_job
is
select empno,ename,job,sal
from emp
where job='MANAGER';
--定義一個游標變量v_row c_job%ROWTYPE ,該類型為游標c_job中的一行數據類型
v_row c_job%rowtype;
begin
for v_row in c_job loop
dbms_output.put_line(v_row.empno||'-'||v_row.ename||'-'||v_row.job||'-'||v_row.sal);
end loop;
end;
/
2.Fetch游標
- 注意:使用的時候必須要明確的打開和關閉
declare
--類型定義
cursor c_job
is
select empno,ename,job,sal
from emp
where job='MANAGER';
--定義一個游標變量
v_row c_job%rowtype;
begin
open c_job;
loop
--提取一行數據到v_row
fetch c_job into v_row;
--判讀是否提取到值,沒取到值就退出
--取到值c_job%notfound 是false
--取不到值c_job%notfound 是true
exit when c_job%notfound;
dbms_output.put_line(v_row.empno||'-'||v_row.ename||'-'||v_row.job||'-'||v_row.sal);
end loop;
--關閉游標
close c_job;
end;
/
其中:
-
%TYPE說明
為了使一個變量的數據類型與另一個已經定義了的變量(尤其是表的某一列)的數據類型相一致 -
%ROWTYPE說明
如果一個表有較多的列,使用%ROWTYPE來定義一個表示表中一行記錄的變量。