DB2 9 运用开辟(733 测验)认证指南,第 2 部分: DB2 数据操作(5)

学习基本观念
developerWorks








辨认游标的圭臬规范楷模

游标的特性

游标有三个主要特性:

  • 游标的圭臬规范楷模(type):只读、可更新或迷糊(ambiguous)
  • 游标的标的方针(direction):前向或可转折
  • 游标的浸染域(scope)

这些特性将在接上去的几个年夜节中注意批评斗嘴。

游标的圭臬规范楷模

DB2 对三种游标圭臬规范楷模的处理责罚有所不合,这些不合主要体目下当今功用方面。我们来看看每种类型。

只读游标

假设 DB2 知道游标是只读的,就可以运用某些功用方面的下风:

  • DB2 凡是可以经由实行记实组块,一次从效能器检索多行,而不必要获取应允更新行的锁。
  • DB2 无意偶尔候可认为盘考选择更好的拜访方案。

假设知道游标不会用于更新或删除行,就应该将它指定为只读,注意做法是将 FOR READ ONLY (或 FOR FETCH ONLY)添加到游标的 SELECT 语句中。假设游标的 SELECT 语句要勾搭多个表,年夜概包孕诸如 ORDER BYGROUP BY 之类的子句,那么游标会被(自动地)归类为只读。

可更新游标

假设在游标的 SELECT 语句中指定了 FOR UPDATE 子句,那么该游标便是可更新的,意即可以经由 Update Where Current Of 语句更新行。SELECT 语句中只能引用一个表(或视图)。由于必需维护数据十足性,DB2 只能为可更新游标实行最低限定的优化。

SQL Reference 中借助术语可删除游标(deletable cursor)来界说可更新游标。这两个术语的在意思上险些是一样的。请参阅 SQL Reference 中关于 DECLARE CURSOR 的描绘。

迷糊游标

望文生义,当 DB2 不克不及依照游标界说确定它是只读游标还是可更新游标时,该游标便是迷糊 游标。换句话说,当游标的 SELECT 语句既没有指定 FOR READ ONLY,也没有指定 FOR UPDATE 时,它便是迷糊游标。对于迷糊游标,DB2 依照针对运用顺序的 BIND 饬令的 BLOCKING 选项的值来选择能否为 select 运用记实组块。假设实行了记实组块,然则又发生发火了更新,就会孕育发生负面的功用影响,以是最好虽然抑制运用迷糊游标。





回页首



游标的标的方针

DB2 嵌入式 SQL 运用顺序的游标支持只应允一次处理责罚一行,并且并且只能按顺向。换句话说,每条 FETCH 语句会把终局会合接上去的一行前去给运用顺序,这是运用顺序经由游标获得行的专一体式格局。

CLI 和 Java 平台支持可转折游标。这些游标游标可以定位到终局会合一个绝对行号上(可以在以后位置之前,也可用在以后位置之后),年夜概移动一个绝对行数(向前或向后)。要体会关于可转折游标的更多信息,请参阅本系列第 4 和第 5 篇教程(辞别关于 ODBC/CLI 和 Java 平台,见 参考材料)。





回页首



游标的浸染域

谈到游标的浸染域,我们指的是可以运用游标来获取行的一段期间。这段期间从游标的 OPEN 语句成功完成入部入手。默许环境下,当游标封锁,年夜概实行提交时,游标的浸染域随之结束。不才一节中可以看到,经由提交来结束游标的浸染域有一定的坏处,然则有一种体式格局可以抑制。





回页首



WITH HOLD 游标

凡是,运用顺序应该极度频仍地实行 COMMIT 语句。这些提交可以让锁得以开释,从而最小化运用顺序之间的并发成果。但是,当触及游标时,提交或者招致成果。这便是引入 WITH HOLD 子句的缘由。

作为一个例子,思索这样一个运用顺序,个中有一条 SQL 语句运用游标读取 10,000 行记实。该运用顺序反省每行的内容,并经由设置一个形态列的值来更新该行。要等到通盘 10,000 行都处理责罚完才停止提交或者会招致锁冲突,因此变为每处理责罚 20 行就提交一次。但是,在缺省环境下,提交操作会封锁游标,因此终局会合的位置将会损掉,运用顺序又不得不停止一些特殊的处理责罚,才具延续从上一次的处所入部入手。

处理责罚这个成果的门径是变动游标的界说,插手 WITH HOLD 子句。这样,提交操作就会让游标处于掀开形态,从而抑制开释维护游标位置时所需的锁。换句话说,WITH HOLD 子句可以将游标的浸染域耽误至提交之后。下面是 WITH HOLD 游标的一个例子:

DECLARE C1 CURSOR WITH HOLD FOR SELECT * FROM STAFF


WITH HOLD 子句对于回滚期间游标发生发火什么事变没有影响。一旦游标封锁,则通盘相干的锁也将被开释。




版权声明: 原创作品,应允转载,转载时请务必以超链接形式标明文章 原始来由 、作者信息和本声明。不然将究查司法责任。

原文地址:https://www.cnblogs.com/zgqjymx/p/1972869.html