1.Oracle 游标(cursor):通过关键字CURSOR来定义一组查询出来的数据集,类似数组一样,把查询到的数据集存储在内存中,然后通过游标指向其中的一条记录,通过循环游标达到循环数据局的目的。
(1)显式游标:使用之前先声明定义。一般是对查询结果定义游标,通过打开游标循环获取结果集内的记录,跳出循环结束游标的获取,关闭游标不再获取结果集。
声明游标:给游标命名并关联一个查询结果集。
declare cursor 游标名
is select查询语句;
打开游标:初始化游标指针,游标一旦打开,就算表的基础数据发生变化游标对应的结果集也不会再变了。
open 游标名;
读取游标中的数据:把当前游标指针指向的数据行读取到对应的变量中,一般和循环一起使用。
fetch 游标名 into 变量名;
关闭游标:游标使用完,一定要关闭游标释放资源。
close 游标名;
显式游标的常用属性:%notfound(没有数据返回true,有数据返回false,用来判断游标是否全部循环完毕)
%found(和notfound相反)
%isopen(判断游标是否打开)
%rowcount(用作计数器,表示当前游标fetch into获取了多少行数据)
例1,创建一个游标,循环打印学生表中的学生信息。
declare
cursor stu_cur is select * from stuinfo order by stuid;
ls_curinfo stu_cur%rowtype;
begin
open stu_cur;
loop
fetch stu_cur into ls_curinfo;
exit when stu_cur%notfound;
dbms_output.put_line('学号:'||ls_curinfo.stuid ||'姓名:'||ls_curinfo.stuname);
end loop;
close stu_cur;
end;
例2,用%rowcount修改案例1,输出语句改为:
dbms_output.put_line('rowcount计数器:第'||stu_cur%rowcount||'位'||'学号:'||ls_curinfo.stuid ||'姓名:'||ls_curinfo.stuname);
(2)隐式游标:PL/SQL自己管理的游标,开发者只能获得它