游标的作用:
就是用于临时存储从数据库中提取的数据块,可以理解为理解为存储数据的一个集合。
1 隐式游标
在PL/SQL程序中执行dml语句和单行查询操作(select into)时,会自动创建隐式游标,名称sql
隐式游标属性:
%found SQL语句影响了一行或多行是为TRUE
%notfound SQL语句没有影响任何行是为TRUE
%rowcount SQL语句影响的行数
%isopen 游标是否打开,始终为FALSE(隐式游标是关闭状态的)
declare
begin
update emp set comm = 400 where deptno = 10;
--%found SQL语句影响了一行或多行是为TRUE
if(sql%found) then
dbms_output.put_line('found修改成功');
else
dbms_output.put_line('found修改失败');
end if;
--%notfound SQL语句没有影响任何行是为TRUE
if(sql%notfound) then
dbms_output.put_line('notfound修改失败');
else
dbms_output.put_line('notfound修改成功');
end if;
--%rowcount SQL语句影响的行数
dbms_output.put_line('影响行数:'||sql%rowcount);
--%isopen 游标是否打开,始终为FALSE(隐式游标是关闭状态的)
if(sql%isopen) then
dbms_output.put_line('游标是打开');
else
dbms_output.put_line('游标是关闭');
end if;
end;
2 显示游标
使用步骤:
-
声明游标
cursor 游标名 is select语句;
-
打开游标
open 游标名;
-
取数据
FETCH 游标名 INTO 变量名1[,变量名2...]; 或 FETCH 游标名 INTO 记录变量;
-
关闭游标
close 游标名;
3 遍历游标
使用for遍历会很简单,会自动打开关闭游标,也会自动取下一条数据
for遍历如下:
declare
cursor v_youbiao is select * from emp;
begin
for a in v_youbiao loop
dbms_output.put_line('员工姓名:' || a.ename || '员工薪资:' || a.sal);
end loop;
end;
while遍历如下:
begin
open v_youbiao;
fetch v_youbiao into v_emp;
while (v_youbiao%found) loop
fetch v_youbiao into v_emp;
--exit when v_youbiao%notfound; --这条可以用在loop循环里面做退出条件
dbms_output.put_line('员工姓名:' || v_emp.ename || '员工薪资:' || v_emp.sal);
end loop;
close v_youbiao;
end;