游标
游标是SQL的一个内存工作区,由系统或用户以变量的形式定义。游标的作用就是用于临时存储从数据库中提取的数据块。在某些情况下,需要把数据从存放在磁盘的表中调到计算机内存中进行处理,最后将处理结果显示出来或最终写回数据库。这样数据处理的速度才会提高,否则频繁的磁盘数据交换会降低效率。游标有两种类型:显式游标和隐式游标。
1. 声明游标
在DECLEAR部分按以下格式声明游标:
CURSOR 游标名[(参数1 数据类型[,参数2 数据类型...])]
IS SELECT语句;
参数是可选部分,所定义的参数可以出现在SELECT语句的WHERE子句中。如果定义了参数,则必须在打开游标时传递相应的实际参数。
SELECT语句是对表或视图的查询语句,甚至也可以是联合查询。可以带WHERE条件、ORDER BY或GROUP BY等子句,但不能使用INTO子句。
实例:
cursor c_name is (select namex from T_namex_j122);
2. 打开游标
在可执行部分,按以下格式打开游标:
OPEN 游标名[(实际参数1[,实际参数2...])];
open c_name;
3. 提取数据
在可执行部分,按以下格式将游标工作区中的数据取到变量中。提取操作必须在打开游标之后进行。
FETCH 游标名 INTO 变量名1[,变量名2...];
fetch c_name into mname;
如果有多个变量的话就是:
cursor emp_cursor is select ename,job from emp where empno=7788;
fetch emp_cursor into v_ename,v_job;
4.关闭游标
CLOSE 游标名;
显式游标打开后,必须显式地关闭。游标一旦关闭,游标占用的资源就被释放,游标变成无效,必须重新打开才能使用。
close c_name;
5. 游标的属性
返回值类型 意义
%rowcount 整型 获得FETCH语句返回的数据行数
%found 布尔型 最近的FETCH语句返回一行数据则为真,否则为假
%notfound 布尔型 与%FOUND属性返回值相反
%isopen 布尔型 游标已经打开时值为真,否则为假
实例:
fetch emp_cursor into v_ename;
exit when emp_cursor%notfound;