游标:本质上是一个指针,指向数据库查询出来的结果集的每一行数据,初始指向第一行数据
功能:处理多行数据
分类:
显式游标
语法:
declare
cursor 游标名 is sql 语句;定义游标
begin
open 游标名; 打开游标
fetch 游标名 into 变量 ; 提取游标指向数据交给变量,然后指针下移
/游标大多是配合循环使用
close 游标名; 关闭游标
end;
例题:
打印输出10号部门的所有人的姓名和工作
declare
cursor cl is select ename,job from emp where deptno=10;
v_ename varchar2(30);
v_job varchar2(30);
begin
open cl;
fetch cl into v_ename,v_job;
dbms_output.put_line(v_ename||v_job);
exit when cl%notfound;
end loop;
close cl;
end;
例题:
打印输出10号部门的所有人的姓名和工作loop循环处理游标
declare
cursor cl is select ename,job from emp where deptno=10;
v_ename varchar2(30);
v_job varchar2(30);
begin
open cl;
loop
fetch cl into v_ename,v_job;
dbms_output.put_line(v_ename||v_job);
exit when cl%notfound;
end loop;
close cl;
end;/当这样子最后一个人打印了两次,将exit when与打印互换
例题:
打印输出10号部门的所有人的姓名和工作while循环处理游标
declare
cursor cl is select ename,job from emp where deptno=10;
v_ename varchar2(30);
v_job varchar2(30);
begin
open cl;
fetch cl into v_ename,v_job;
while cl%found loop
dbms_output.put_line(v_ename||v_job);
fetch cl into v_ename,v_job;
end loop;
close cl;
end;
例题:
打印输出10号部门的所有人的姓名和工作for循环处理游标
//自动打开关闭游标自动fetch游标
declare
cursor cl is select ename,job from emp where deptno=10;
begin
for i in cl loop
dbms_output.put_line(i.ename||i.job);
end loop;
end;
cursor cur(dno number defaule 20,v_sal number) is select /(名 类型 默认值)
dbms_output.put_line(cl%rowcount)多少个数据
declare
begin
if
cl%isopen then dbms_output.put_line('打开');
else open cl;
end if;
loop
end loop;
end;
隐式游标
针对dml语句,所有的隐式游标名字统一:sql
dclare
begin
update emp set sal=1000 where deptno=10;
dbms_output.put_line(sql%rowcount);
end;
游标属性:
1.%found
当游标有结果的时候返回ture
2.%notfound
当游标没有结果的时候返回ture
3.%isopen
判断游标是否打开
4.%rowcount
返回一个数值,游标处理了多少行记录