DB2 9 运用开辟(733 测验)认证指南,第 2 部分: DB2 数据操作(5)
2011-03-06 23:51
531 查看
学习基本观念
辨认游标的圭臬规范楷模
游标的特性
游标有三个主要特性:
游标的圭臬规范楷模(type):只读、可更新或迷糊(ambiguous)
游标的标的方针(direction):前向或可转折
游标的浸染域(scope)
这些特性将在接上去的几个年夜节中注意批评斗嘴。
游标的圭臬规范楷模
DB2 对三种游标圭臬规范楷模的处理责罚有所不合,这些不合主要体目下当今功用方面。我们来看看每种类型。
只读游标
假设 DB2 知道游标是只读的,就可以运用某些功用方面的下风:
DB2 凡是可以经由实行记实组块,一次从效能器检索多行,而不必要获取应允更新行的锁。
DB2 无意偶尔候可认为盘考选择更好的拜访方案。
假设知道游标不会用于更新或删除行,就应该将它指定为只读,注意做法是将
可更新游标
假设在游标的
SQL Reference 中借助术语可删除游标(deletable cursor)来界说可更新游标。这两个术语的在意思上险些是一样的。请参阅 SQL Reference 中关于
迷糊游标
望文生义,当 DB2 不克不及依照游标界说确定它是只读游标还是可更新游标时,该游标便是迷糊 游标。换句话说,当游标的
回页首
游标的标的方针
DB2 嵌入式 SQL 运用顺序的游标支持只应允一次处理责罚一行,并且并且只能按顺向。换句话说,每条
CLI 和 Java 平台支持可转折游标。这些游标游标可以定位到终局会合一个绝对行号上(可以在以后位置之前,也可用在以后位置之后),年夜概移动一个绝对行数(向前或向后)。要体会关于可转折游标的更多信息,请参阅本系列第 4 和第 5 篇教程(辞别关于 ODBC/CLI 和 Java 平台,见 参考材料)。
回页首
游标的浸染域
谈到游标的浸染域,我们指的是可以运用游标来获取行的一段期间。这段期间从游标的
回页首
WITH HOLD 游标
凡是,运用顺序应该极度频仍地实行
作为一个例子,思索这样一个运用顺序,个中有一条 SQL 语句运用游标读取 10,000 行记实。该运用顺序反省每行的内容,并经由设置一个形态列的值来更新该行。要等到通盘 10,000 行都处理责罚完才停止提交或者会招致锁冲突,因此变为每处理责罚 20 行就提交一次。但是,在缺省环境下,提交操作会封锁游标,因此终局会合的位置将会损掉,运用顺序又不得不停止一些特殊的处理责罚,才具延续从上一次的处所入部入手。
处理责罚这个成果的门径是变动游标的界说,插手
版权声明:
原创作品,应允转载,转载时请务必以超链接形式标明文章 原始来由 、作者信息和本声明。不然将究查司法责任。
辨认游标的圭臬规范楷模
游标的特性
游标有三个主要特性:
游标的圭臬规范楷模(type):只读、可更新或迷糊(ambiguous)
游标的标的方针(direction):前向或可转折
游标的浸染域(scope)
这些特性将在接上去的几个年夜节中注意批评斗嘴。
游标的圭臬规范楷模
DB2 对三种游标圭臬规范楷模的处理责罚有所不合,这些不合主要体目下当今功用方面。我们来看看每种类型。
只读游标
假设 DB2 知道游标是只读的,就可以运用某些功用方面的下风:
DB2 凡是可以经由实行记实组块,一次从效能器检索多行,而不必要获取应允更新行的锁。
DB2 无意偶尔候可认为盘考选择更好的拜访方案。
假设知道游标不会用于更新或删除行,就应该将它指定为只读,注意做法是将
FOR READ ONLY(或
FOR FETCH ONLY)添加到游标的
SELECT语句中。假设游标的
SELECT语句要勾搭多个表,年夜概包孕诸如
ORDER BY或
GROUP 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子句对于回滚期间游标发生发火什么事变没有影响。一旦游标封锁,则通盘相干的锁也将被开释。
版权声明:
原创作品,应允转载,转载时请务必以超链接形式标明文章 原始来由 、作者信息和本声明。不然将究查司法责任。
相关文章推荐
- DB2 9 运用开发(733 测验)认证指南,第 3 部分: XML 数据操作(11)
- DB2 9 使用开辟(733 检验)认证指南,第 2 部分: DB2 数据操作(1)
- DB2 9 运用拓荒(733 考试)认证指南,第 2 部门: DB2 数据操作(3)
- DB2 9 利用开辟(733 测验)认证指南,第 1 部分: 数据库工具与编程步调(6)
- DB2 9 运用斥地(733 测验)认证指南,第 1 部分: 数据库对象与编程方式(5)
- DB2 9 使用开辟(733 测验)认证指南,第 1 部分: 数据库对象与编程方法(4)
- DB2 9 运用开辟(733 检讨)认证指南,第 1 部分: 数据库对象与编程编制(1)
- DB2 9 运用开发(733 测验)认证指南,第 4 部分: 嵌入式 SQL 编程(6)
- DB2 9 应用开荒(733 测验)认证指南,第 3 部分: XML 数据操作(1)
- DB2 9 运用开发(733 测验)认证指南,第 1 部分: 数据库工具与编程办法(1)
- DB2 9 运用开辟(733 考试)认证指南,第 2 局部: DB2 数据独霸(9)
- DB2 9 运用启示(733 测验)认证指南,第 2 局部: DB2 数据利用(7)
- DB2 9 使用拓荒(733 检讨)认证指南,第 2 部分: DB2 数据操作(6)
- DB2 9 操作开发(733 测验)认证指南,第 8 部分: 初级编程(5)
- DB2 9 运用开拓(733 检修)认证指南,第 6 部分: .NET 编程(3)
- DB2 9 利用启迪(733 测验)认证指南,第 8 部分: 初级编程(4)
- DB2 9 利用开辟(733 测验)认证指南,第 3 局部: XML 数据操纵(10)
- DB2 9 行使启示(733 检验)认证指南,第 2 部分: DB2 数据行使(2)
- DB2 9 运用开拓(733 测验)认证指南,第 5 部门: CLI/ODBC 编程(7)
- DB2 9 运用开拓(733 考试)认证指南,第 3 部分: XML 数据行使(6)