数据库——实验7 游标的使用

1. 游标的概念

游标是一种处理数据的方法,它提供了在查询结果集中向前或者向后浏览数据、处理结果、集中数据的能力。游标可以看成是一种指针,它既可以指向当前位置,也可以指向结果集中的任意位置,它允许用户对指定位置的数据进行处理。有了游标,用户就可以访问结果集中的任意一行数据,在将游标放置到某行之后,可以在该行或从该位置开始的行块上执行操作。

2. 定义及使用游标

游标可以看作是由一个查询结果集合组成的一个临时文件,下面介绍怎样建立和使用游标 

1)声明游标

游标在使用之前必须先声明,可用 DECLARE CURSOR 语句声明游标,语法如下:

DECLARE < 游标名 > [ INSENSITIVE ][ SCROLL ] CURSOR

FOR <SELECT- >

[FOR{READ ONLY|UPDATE[OF<列名>[,<列名>  ]]}]

·INSENSITIVE: 用数据的临时副本来定义游标,所有对游标的请求都反映在这个临时表上,因此这时的游标实际上是不允许修改的。

·SCROLL: 可以用所有的方法来存取数据允许删除和更新

·FOR<SELECT > :  SELECT  查询块定义一个游标,游标的内容是SELECT 查询的结果。

·FOR READ ONLY  FOR UPDATE: 说明游标为只读的还是可修改的。

2)打开游标

使用 OPEN  语句的功能是打开游标,实际上就是执行相应的 SELECT 查询语句,将查询结果放到缓冲区中。这时游标处于活动状态,游标指针指向第一条记录。语法如下:

OPEN <  >

3)提取游标中数据

FETCH语句是从游标中提取特定的一行。它的语法结构如下:

FETCH

[ [ NEXT | PRIOR | FIRST | LAST | ABSOLUTE n | RELATIVE n ] FROM ]

<  >

[INTO:<主变量1>,<主变量2>]

·NEXT说明如果是在 OPEN  后第一次执行 FETCH  命令,则返回结果集的第一 行,否则使游标的指针指向结果集的下一行,NEXT  是默认的选项。

·PRIOR、FIRST 、LAST 、ABSOLUTE n 、RELATIVE n 选项只有在定义游标时使用SCROOL 选项才可以使用。

·PRIOR: 返回结果集当前行的前一行。

·FIRST: 返回结果集的第一行。

·LAST: 返回结果集的最后一行。

·ABSOLUTE n如果n是正数,则返回结果集的第n行;如果n是负数,则返回结果集倒数第n行,

·RELATIVE nn 是正数,则返回当前行后的第n行;如果n是负数,则返回当前行开始倒数的第 n 行。

·INTO该语句的功能是把取出游标的当前记录并送入到主变量,INTO后的主变量要与在DECLARE CURSORSELECT 的字段相对应。

同时使游标指针指向根据 PRIORFIRST LAST ABSOLUTE n RELATIVE n 选项指向的某条记录。 

4)关闭游标

使用CLOSE语句关闭游标,语法如下:

CIOSE <游标名>

5)释放游标

使用 DEALLOCATE 语句释放游标,语法如下:

DEALLOCATE < 游 >

CLOSE  语句只是关闭游标,需要时还可以重新打开,而DEALLOCATE 语句则要释放和删除与游标有关的所有数据结构和定义。

3. 使用游标修改和删除数据

使用游标不仅可以用来浏览查询结果,还可以用 UPDATE 修改游标对应的当前行或用 DELETE 语句删除对应的当前行。

(1)使用CURRENT 形式的 UPDATE 语句修改数据,这种形式的 UPDATE 语句是 根据游标的当前记录修改数据库表中的记录。语法如下:

UPDATE <   >

SET <列名>={<表达式> | NULL}

[ ,<列名>={<表达式> | NULL}]

WHERE CURRENT OF < 游 >

(2)使用CURRENT   形式的 DELETE 语句删 除数据,这种形式的 DELETE  语句是根据游标的当前记录删除数据库表中的记录。语法如下,

DELETE FROM <  >

WHERE CURRENT OF <  >

由于UPDATE DELETE   语句都是面向集合的操作,所以可一次性修改或删除满足条件的所有记录。如果用户只想修改其中的一些记录,则必须借助于游标,用 CURRENT 式的 DELETE UPDATE 语句来完成。

4. 使用游标的步骤

使用游标的工作流程如图1-34所示。

(1)声明游标。

(2)打开游标。

(3)从游标的结果集中读取数据。

(4)对游标中的数据进行逐行操作。

(5)关闭游标。

(6)释放游标。

  • 26
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值