c语言游标形式的指针法,游标的定义和使用.doc

游标的定义和使用

第三章 游标的定义和使用

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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值