DB2中的游标

1. 游标的定义

当应用程序从表中读取的记录大于1条时,需要用游标CURSOR(游标)来一次一条的处理这些记录。也就是说CURSOR用来处理存在表中符合条件的多条记录(类似COBOL程序循环的读文件)(就本质而言,游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。)

2. 游标的用法

一个游标按如下的操作顺序来处理数据:

  • 定义游标:为游标指定一个名字和Select语句
  • 打开游标:打开游标,生成结果集
  • 使用游标读取数据:使用Fetch命令把结果集里的数据读取到宿主变量中,并可对游标指向的数据进行修改、删除等操作。
  • 关闭游标:关闭游标,释放资源

3. 游标的操作详解

  • 定义游标: 为游标指定一个名字和Select语句

  • 基本格式:

EXEC SQL
     DECLARE cursor-name CURSOR FOR 
     SELECT col-name1, col-name2
     FROM table-name
     Where search-condiction
     (*FOR UPDATE OF* col-name2)
END-EXEC.

注意: 如果在读取的同时需要更新某些记录,必须要使用FOR UPDATE OF语句把需要更新的列名写出来,这样在打开游标时,DB2会在符合条件的记录上加更新锁,防止其他程序同时对源表进行更新造成数据错乱。
此外,在声明游标时,Select语句不能包含INTO子句。

  • 打开游标: 打开游标,生成Select的结果集

  • 基本格式:

EXEC SQL
     OPEN cursor-name
END-EXEC.

注意: cursor-name必须是已经声明过的游标名字,程序可以通过检查SQLCODE来确定CURSOR打开成功

  • 使用游标读取数据: 使用FETCH命令把结果集里的数据读取到宿主变量中,并可对游标指向的数据进行修改、删除等操作。

  • 基本格式:

EXEC SQL
     FETCH cursor-name
     INTO: host-name1,
         : host-nmae2
END-EXEC.

注意: (1)FETCH的游标名必须已经打开,INTO指定的宿主变量个数与类型必须与声明游标时指定的一致,并且必须要使用宿主变量接受数据;(2)FETCH类似COBOL程序的“读”文件操作,一般需要放在一个循环体中,一条一条的去读数据

宿主变量: 用来使应用程序和SQL语句进行数据交换。宿主变量可以通过DB2I生成,表里有几个列,就有几个宿主变量,一一对应;宿主变量也可以在COBOL程序的工作存储节自定义,但必须为指定的数据结构类型

  • 使用游标更新数据:

  • 基本格式:

EXEC SQL
     UPDATE table-name
     SET col-name = values
     (*WHERE CURRENT OF* cursor-name)
END-EXEC. 

注意: WHERE CURRENT OF cursor-name 表示更新游标指定的该条记录。

  • 关闭游标: 处理结束之后,要关闭游标释放资源

  • 基本格式:

EXEC SQL
   CLOSE cursor-name
END-EXEC.

注意: 处理结束后一定要关闭游标

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值