-- 游标的使用
%found: 检验是否fetch到值
%notfound: 判断游标所在的行是否有效
%rowcount: 成功执行的数据行数
%isopen: 判断游标是否打开
-- for...loop(不需要显式打开、取值、关闭游标)
CREATE OR REPLACE procedure get_emp_info_p as
-- 声明一个游标
cursor empcur is select * from emp;
empinfo emp%rowtype;
begin
-- 循环
for empinfo in empcur loop
exit when empcur%notfound;
dbms_output.put_line('员工编号:'||empinfo.empno);
dbms_output.put_line('员工姓名:'||empinfo.ename);
end loop;
end;
------------------------------------------------------
-- while...loop(需要显式打开、取值、关闭游标)
CREATE OR REPLACE procedure get_emp_info_p as
-- 声明一个游标
cursor empcur is select * from emp;
empinfo emp%rowtype;
begin
-- 对游标的操作使用循环,操作之前必须先打开游标
-- 判断游标是否已经打开
if empcur%isopen then
null;
else
open empcur;
end if;
-- 提取数据
fetch empcur into empinfo;
-- 判断此行是否有数据,有就进入循环体
while (empcur%found) loop
dbms_output.put_line('员工编号:'||empinfo.empno);
dbms_output.put_line('员工姓名:'||empinfo.ename);
-- 修改游标,继续向下提取数据
fetch empcur into empinfo;
end loop;
close empcur;
end;
------------------------------------------------------
-- loop...when(需要显式打开、取值、关闭游标)
CREATE OR REPLACE procedure get_emp_info_p as
-- 声明一个游标
cursor empcur is select * from emp;
empinfo emp%rowtype;
begin
-- 对游标的操作使用循环,操作之前必须先打开游标
-- 判断游标是否已经打开
if empcur%isopen then
null;
else
open empcur;
end if;
-- 循环
loop
-- 提取数据
fetch empcur into empinfo;
-- 没有数据的时候就exit
exit when empcur% notfound;
dbms_output.put_line('员工编号:'||empinfo.empno);
dbms_output.put_line('员工姓名:'||empinfo.ename);
end loop;
end;
-- 执行存储过程
exec get_emp_info_p;
结果: