文档详情

第3章光标的定义和使用.doc

发布:2017-07-23约2.31万字共6页下载文档
文本预览下载声明
第三章 游标的定义和使用 3.1 游标的分类 前面介绍的SELECT语句只能处理返回一行数据的情况,当SELECT语句返回多个数据行时,必须使用游标。 游标是指向SELECT语句查询出的多行数据的指针,SELECT语句查询出的行组成一结果表,称为活动集。游标指向的行称为当前行。一般说来,游标分为三类: (1)滚动游标 (2)非滚动游标 (3)更新游标 滚动游标是指程序可以根据需要指向活动集的某一行数据,即游标的位置可来回移动。非滚动游标是指活动集中的每行只能依次被读出。更新游标是非滚动游标,它的特点在于:数据库对游标指向的当前行加锁,当程序读下一行数据时,本行数据解锁,下一行数据加锁。锁加在数据库基本表对应的行上。 另外一种分类方法是将ESQL/C提供的游标分为两种类型,select游标和insert游标,select游标用于处理查询结果为多行数据的select语句;insert游标用于成块地往数据库中插入数据。 3.2 定义与使用游标的语句 定义和使用游标的语句以及与游标相关的语句有五个: (1)DECLARE语句 这条语句用来定义游标,其一般形式是: DECLARE 游标名 [SCROLL] CURSOR FOR SELECT语句 有关键字SCROLL的DECLARE语句定义的是滚动游标。SELECT语句可表为: SELECT子句 [INTO子句] FROM子句 [WHERE子句] [GROUP BY子句] [HAVING子句] [ORDER BY子句] [INTO TEMP子句] DECLARE语句的作用是在数据库系统表中分配该游标资源,给游标一个自己的名字。游标名的作用范围是只要游标不被释放(FREE),在定义它的模块内有效。 (2)OPEN语句 在取得游标中的数据之前必须先执行OPEN语句来打开游标。OPEN语句的形式是: OPEN游标名 OPEN语句的作用是,把SELECT语句送到SQL语句检查器中分析,决定活动集的内容,为SELECT语句的结果分配一块内存空间。对于打开滚动游标来说,还要建一个临时表。同时,OPEN语句把游标定位到活动集的第一行。 (3)FETCH语句 FETCH语句的一般形式: FETCH [位置] 游标名 [INTO variable-list] 位置可以是这些关键字之一:NEXT,PREVIOUS,PRIOR,FIRST,LAST,CURRENT,RELATIVE n,ABSOLUTE n;FETCH中的INTO子句与SELECT语句中的INTO子句,二者必居其一。INTO关键字后跟宿主变量。 FETCH语句的作用是使游标定位到活动集的某行上。不管是否带有选择项,FETCH在完成游标的定位后,如果游标定位在活动集上,则把游标所在行的各列值分别赋给INTO子句中的各变量,如果游标定位在活动集以外,则把全局变量status的值置为NOTFOUND。游标定位在活动集第一行时执行FETCH PREVIOUS语句,或者,当游标定位在活动集最后一行时执行FETCH NEXT语句都会把游标定位到活动集以外。因此,使用FETCH语句时,经常要检查status的值是否等于NOTFOUND,以便进一步的操作。 (4)CLOSE语句 关闭游标,CLOSE语句的一般形式是: CLOSE游标名 执行这条语句会释放OPEN语句分配的存储资源。需要再用该游标时,执行OPEN语句。 (5)FREE语句 FREE语句将把登记在系统表中的游标名删除,此后便不能再OPEN该游标了。 3.3 select游标 C语言中嵌入的单个select语句,只能处理查询结果恰好是一行数据的情况,当查询出多行数据时,ESQL/C就会报错。为此,ESQL/C提供了游标这一手段来处理这种情况。 查询语句select返回的多行数据称为活动集。ESQL/C程序中,一次只能处理活动集中的一行,这一行就叫做当前行。游标是指向当前行的一个指针。可见,游标是由活动集和一个指针来组成的。游标有两种状态,打开和关闭。当游标处于打开状态时,它指向活动集的位置有四种情况:(1)指向当前行;(2)指向两行之间;(3)指向第一行的前面;(4)指向最后一行的后面;当游标处于关闭状态时,它不再和活动集相关联。 使用select游标的步骤如下: (1)将游标与select语句相关系:使用declare语句将一个命名的游标与要处理的select语句联
显示全部
相似文档