PL/SQL语言用游标来管理SQL的SELECT的语句,游标是为处理这些语句而分配的一大块内存,一个对表进行操作的PL/SQL语句通常可产生或处理一组记录,但是许多应用程序,尤其是PL/SQL语言嵌入到的主语言通常不能吧整个结果集作为一个单元来处理,这些应用程序需要有一种机制来保证每次处理结果集中的一行或几行,游标就提供了这种机制,
游标提供了对一个结果集进行逐行处理的能力,游标可视为一种特殊的指针,他与某个查询结果相联系,可以指向结果集的任意位置,一边对指定位置的数据进行处理,使用游标可以在查询数据的同时对数据进行处理,
游标分两种:显示游标和隐式游标
对显示游标的使用要遵循声明游标---》打开游标---》读取数据---》关闭游标。使用隐式游标时,就不必执行上诉步骤啦,
先来学习显示游标吧!
(1)声明游标
显示游标是作为生命段的一部分进行定义的
举个例子:
declare cursor xs_cur
is
select xh,xm,cj
from xs
where zym = '计算机';
(2)打开游标
声明游标后,要使用游标从中提取数据,必须先打开游标,用open语句打开游标
举个例子吧,先定义个游标,然后打开游标,输出行数
declare cursor xs_cur
is
select xh,xm,zxf
from xs;
begin
open xs_cur;
dbms_output.put_line(xs_cur%rowcount);
end;
(3)读取数据
游标打开后就可以使用fetch语句从中读取数据啦,
再来个例子;
declare
v_xh char(6);
v_zxf number(2);
cursor xs_cur
is
select xh,zxf
from xs
where zym='计算机';
begin
open xs_cur;
fetch xs_cur into v_xh,v_zxf;
while xs_cur%found
loop
dbms_output.put_line(v_xh+v_zxf);
fetch xs_cur into v_xh,v_zxf;
end loop;
close xs_cur;
end;
(4)关闭游标
关闭游标用close语句
使用游标要注意的
(1)用%found和%notfound检验游标是否成功,根据其返回值TRUE或FALSE检查是否应该结束游标的使用。
(2)循环执行游标取数据操作时,检索出的总数据行数存放在系统变量%rowcount中。
例如
while counter<50 loop
fetch xs_cur into v_xh,v_zxf;
if xs_cur%rowcount<=15 then
...
else
...
end if;
counter:=counter+1;
end loop;
(3)游标的目标变量必须与游标select表中列的数据类型一致
(4)如果试图打开一个已经打开的游标或者关闭一个已经关闭的游标,将会出错,因此用户在打开或关闭游标前,若不清楚其状态,应该用%isopen进行检测,根据返回值为TRUE或FALSE,采取相应的动作。
例如
if mycur%isopen then
fetch mycur into v_kch,v_cj;
else
open mycur;
end if;