静态游标概念
静态游标是只读游标,它总是按照打开游标时的原样显示结果集,在编译时就能确定静 态游标使用的查询。
静态游标又分为两种:隐式游标和显式游标。
1.隐式游标
%FOUND:语句是否修改或查询到了记录,是返回TRUE,否则返回FALSE;
%NOTFOUND:语句是否未能成功修改或查询到记录,是返回TRUE,否则返回 FALSE;
%ISOPEN:游标是否打开。是返回TRUE,否返回FALSE。由于系统在语句执行 完成后会自动关闭隐式游标,因此隐式游标的%ISOPEN 属性永远为FALSE;
%ROWCOUNT:DML 语句执行影响的行数,或SELECT…INTO 语句返回的行数。
2.显示游标
显式游标指向一个查询语句执行后的结果集区域。当需要处理返回多条记录的查询时, 应显式地定义游标以处理结果集地每一行。 使用显式游标一般包括四个步骤:
1. 定义游标:在DMSQL 程序的声明部分定义游标,声明游标及其关联的查询语句;
2. 打开游标:执行游标关联的语句,将查询结果装入游标工作区,将游标定位到结果 集的第一行之前;
3. 拨动游标:根据应用需要将游标位置移动到结果集的合适位置;
4. 关闭游标:游标使用完后应关闭,以释放其占有的资源。 下面对这四个步骤进行具体介绍。
不同语法定义显示游标
cursor c1 is select name from student where id=1;
cursor c2 return resources.employee%rowtype is select * from resources.employee
cursor c3 is table employee
注意cursor c1 fast中的fast是指该游标是快速游标,缺省为NO FAST,为普通游标。快速游标提前返回结果集,速度上提升明显,但是存在以下的使用约束:
FAST 属性只在显示游标中支持;
使用快速游标的DMSQL 程序语句块中不能修改快速游标所涉及的表;
不支持游标更新和删除;
不支持NEXT 以外的FETCH 方向;
不支持快速游标作为函数返回值;
MPP 环境下不支持对快速游标进行FETCH 操作。
打开游标:open 游标名
拨动游标:FETCH [<fetch 选项> [FROM]] <游标名> [ [BULK COLLECT] INTO <主变量名>{,<主变量 名>} ] [LIMIT <rows>]; <fetch 选项>::= NEXT|PRIOR|FIRST|LAST|ABSOLUTE n|RELATIVE n
关闭游标:close 游标名
游标在使用完后应及时关闭,以释放它所占用的内存空间。当游标关闭后,不能再从游标中获取数据,否则将报错。如果需要,可以再次打开游标。
例