游标可以分为两类:静态游标和REF游标。静态游标是在编译时和对应的查询语句绑定在一起,静态游标可以分为隐式游标和显示游标。REF游标(应用游标)和对应的查询语句只有在运行时才能决定,在开发时一般用REF游标和游标变量实现,为了使用REF游标必须使用游标变量。REF游标又可分为两种引用游标:强返回类型游标和弱返回类型游标。
那么如何使用游标呢?首先,声明一个游标,就是将一个查询语句绑定到游标上,声明时,查询语句并不执行。声明游标的语法如下:
Cursor 游标名[(参数)]
游标声明中,可以有参数,可以有返回值,规定返回值类型,游标声明中的select中不能有into子句。
Open命令用于打开游标,打开游标时,与绑定的select语句开始执行。并且查询的结果集中,游标指针默认的指向第一个值(行)。
Open
若游标有参数,则打开游标时,就要为游标传实际参数。
从游标中提取数据,使用fetch语句可以从打开的游标中检索数据
Fetch
Fetch命令常写在循环里面,用于从结果集中检索一行数据,如果是多列,则要定义多个变量,或者一个记录类型的变量接受。
使用完游标之后,应该关闭游标,语法是:
Close 游标名
游标属性:
%found
下面是例子:
declare
cursorname testss.names%type;
cursor cursorss is select names from testss;
begin
end;
如果带参数,则如下:
declare
cursorname testss.names%type;
cursor cursorss(canshu number) is select names from testss where id=canshu;
begin
end;
关于声明变量部分和声明游标部分,放在declare中,在begin中打开游标并且使用。需要注意的是,游标一定要有退出条件,不然会陷入死循环,有可能会摧毁数据或者数据库。使用游标的好处是可以对查询出的满足条件的逐条记录进行操作。比频繁的打开数据库,操作数据,关闭数据库更方便,更高效。虽然所占的内存增加了,但是对于批处理的数据,是很好的解决办法。