Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103563578
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:18:19

学习基本概念

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 2 部分: DB2 数据操纵(5)-sdccf-ChinaUnix博客
  • 博客访问: 103563569
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:18:19

学习基本概念

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 2 部分: DB2 数据操纵(5)-sdccf-ChinaUnix博客
  • 博客访问: 103563580
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:18:19

学习基本概念

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 2 部分: DB2 数据操纵(5)-sdccf-ChinaUnix博客
  • 博客访问: 103563581
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:18:19

学习基本概念

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 2 部分: DB2 数据操纵(5)-sdccf-ChinaUnix博客
  • 博客访问: 103563582
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:18:19

学习基本概念

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 2 部分: DB2 数据操纵(5)-sdccf-ChinaUnix博客
  • 博客访问: 103563583
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:18:19

学习基本概念

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 2 部分: DB2 数据操纵(5)-sdccf-ChinaUnix博客
  • 博客访问: 103563584
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:18:19

学习基本概念

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 2 部分: DB2 数据操纵(5)-sdccf-ChinaUnix博客
  • 博客访问: 103563585
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:18:19

学习基本概念

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 2 部分: DB2 数据操纵(5)-sdccf-ChinaUnix博客
  • 博客访问: 103563586
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:18:19

学习基本概念

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 2 部分: DB2 数据操纵(5)-sdccf-ChinaUnix博客
  • 博客访问: 103563587
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:18:19

学习基本概念

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 2 部分: DB2 数据操纵(5)-sdccf-ChinaUnix博客
  • 博客访问: 103563588
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:18:19

学习基本概念

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 2 部分: DB2 数据操纵(5)-sdccf-ChinaUnix博客
  • 博客访问: 103563589
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:18:19

学习基本概念

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 2 部分: DB2 数据操纵(5)-sdccf-ChinaUnix博客
  • 博客访问: 103563590
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:18:19

学习基本概念

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 2 部分: DB2 数据操纵(5)-sdccf-ChinaUnix博客
  • 博客访问: 103563591
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:18:19

学习基本概念

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 2 部分: DB2 数据操纵(5)-sdccf-ChinaUnix博客
  • 博客访问: 103563592
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:18:19

学习基本概念

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 2 部分: DB2 数据操纵(5)-sdccf-ChinaUnix博客
  • 博客访问: 103563593
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:18:19

学习基本概念

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 2 部分: DB2 数据操纵(5)-sdccf-ChinaUnix博客
  • 博客访问: 103563584
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:18:19

学习基本概念

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 2 部分: DB2 数据操纵(5)-sdccf-ChinaUnix博客
  • 博客访问: 103563595
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:18:19

学习基本概念

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 2 部分: DB2 数据操纵(5)-sdccf-ChinaUnix博客
  • 博客访问: 103563596
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:18:19

学习基本概念

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 2 部分: DB2 数据操纵(5)-sdccf-ChinaUnix博客
  • 博客访问: 103563597
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:18:19

学习基本概念

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 2 部分: DB2 数据操纵(5)-sdccf-ChinaUnix博客
  • 博客访问: 103563598
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:18:19

学习基本概念

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 2 部分: DB2 数据操纵(5)-sdccf-ChinaUnix博客
  • 博客访问: 103563599
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:18:19

学习基本概念

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 2 部分: DB2 数据操纵(5)-sdccf-ChinaUnix博客
  • 博客访问: 103563600
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:18:19

学习基本概念

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 2 部分: DB2 数据操纵(5)-sdccf-ChinaUnix博客
  • 博客访问: 103563601
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:18:19

学习基本概念

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 2 部分: DB2 数据操纵(5)-sdccf-ChinaUnix博客
  • 博客访问: 103563602
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:18:19

学习基本概念

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 2 部分: DB2 数据操纵(5)-sdccf-ChinaUnix博客
  • 博客访问: 103563603
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:18:19

学习基本概念

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 2 部分: DB2 数据操纵(5)-sdccf-ChinaUnix博客
  • 博客访问: 103563604
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:18:19

学习基本概念

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 2 部分: DB2 数据操纵(5)-sdccf-ChinaUnix博客
  • 博客访问: 103563605
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:18:19

学习基本概念

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 2 部分: DB2 数据操纵(5)-sdccf-ChinaUnix博客
  • 博客访问: 103563606
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:18:19

学习基本概念

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 2 部分: DB2 数据操纵(5)-sdccf-ChinaUnix博客
  • 博客访问: 103563607
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:18:19

学习基本概念

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 2 部分: DB2 数据操纵(5)-sdccf-ChinaUnix博客
  • 博客访问: 103563608
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:18:19

学习基本概念

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 2 部分: DB2 数据操纵(5)-sdccf-ChinaUnix博客
  • 博客访问: 103563599
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:18:19

学习基本概念

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 2 部分: DB2 数据操纵(5)-sdccf-ChinaUnix博客
  • 博客访问: 103563610
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:18:19

学习基本概念

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 2 部分: DB2 数据操纵(5)-sdccf-ChinaUnix博客
  • 博客访问: 103563611
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:18:19

学习基本概念

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 2 部分: DB2 数据操纵(5)-sdccf-ChinaUnix博客
  • 博客访问: 103563612
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:18:19

学习基本概念

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 2 部分: DB2 数据操纵(5)-sdccf-ChinaUnix博客
  • 博客访问: 103563613
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:18:19

学习基本概念

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 2 部分: DB2 数据操纵(5)-sdccf-ChinaUnix博客
  • 博客访问: 103563614
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:18:19

学习基本概念

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 2 部分: DB2 数据操纵(5)-sdccf-ChinaUnix博客
  • 博客访问: 103563615
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:18:19

学习基本概念

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 2 部分: DB2 数据操纵(5)-sdccf-ChinaUnix博客
  • 博客访问: 103563616
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:18:19

学习基本概念

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 2 部分: DB2 数据操纵(5)-sdccf-ChinaUnix博客
  • 博客访问: 103563617
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:18:19

学习基本概念

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 2 部分: DB2 数据操纵(5)-sdccf-ChinaUnix博客
  • 博客访问: 103563618
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:18:19

学习基本概念

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 2 部分: DB2 数据操纵(5)-sdccf-ChinaUnix博客
  • 博客访问: 103563619
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:18:19

学习基本概念

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 2 部分: DB2 数据操纵(5)-sdccf-ChinaUnix博客
  • 博客访问: 103563620
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:18:19

学习基本概念

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 2 部分: DB2 数据操纵(5)-sdccf-ChinaUnix博客
  • 博客访问: 103563621
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:18:19

学习基本概念

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 2 部分: DB2 数据操纵(5)-sdccf-ChinaUnix博客
  • 博客访问: 103563622
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:18:19

学习基本概念

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 2 部分: DB2 数据操纵(5)-sdccf-ChinaUnix博客
  • 博客访问: 103563623
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:18:19

学习基本概念

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 2 部分: DB2 数据操纵(5)-sdccf-ChinaUnix博客
  • 博客访问: 103563614
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:18:19

学习基本概念

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 2 部分: DB2 数据操纵(5)-sdccf-ChinaUnix博客
  • 博客访问: 103563625
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:18:19

学习基本概念

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 2 部分: DB2 数据操纵(5)-sdccf-ChinaUnix博客
  • 博客访问: 103563626
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:18:19

学习基本概念

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 2 部分: DB2 数据操纵(5)-sdccf-ChinaUnix博客
  • 博客访问: 103563627
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:18:19

学习基本概念

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 2 部分: DB2 数据操纵(5)-sdccf-ChinaUnix博客
  • 博客访问: 103563628
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:18:19

学习基本概念

developerWorks

DB2 9 应用开发(733 考试)认证指南,第 2 部分: DB2 数据操纵(5)-sdccf-ChinaUnix博客
  • 博客访问: 103563629
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 23:18:19

学习基本概念

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 语句成功完成开始。默认情况下,当游标关闭,或者执行提交时,游标的作用域随之结束。在下一节中可以看到,通过提交来结束游标的作用域有一定的害处,但是有一种方法可以避免。





回页首


通常,应用程序应该非常频繁地执行 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 子句对于回滚期间游标发生什么事情没有影响。一旦游标关闭,则所有相关的锁也将被释放。

阅读(127346) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


识别游标的类型

游标有三个主要特征:

  • 游标的类型(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 语句成功完成开始。默认情况下,当游标关闭,或者执行提交时,游标的作用域随之结束。在下一节中可以看到,通过提交来结束游标的作用域有一定的害处,但是有一种方法可以避免。





回页首


通常,应用程序应该非常频繁地执行 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 子句对于回滚期间游标发生什么事情没有影响。一旦游标关闭,则所有相关的锁也将被释放。

阅读(127345) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


识别游标的类型

游标有三个主要特征:

  • 游标的类型(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 语句成功完成开始。默认情况下,当游标关闭,或者执行提交时,游标的作用域随之结束。在下一节中可以看到,通过提交来结束游标的作用域有一定的害处,但是有一种方法可以避免。





回页首


通常,应用程序应该非常频繁地执行 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 子句对于回滚期间游标发生什么事情没有影响。一旦游标关闭,则所有相关的锁也将被释放。

阅读(127344) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


识别游标的类型

游标有三个主要特征:

  • 游标的类型(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 语句成功完成开始。默认情况下,当游标关闭,或者执行提交时,游标的作用域随之结束。在下一节中可以看到,通过提交来结束游标的作用域有一定的害处,但是有一种方法可以避免。





回页首


通常,应用程序应该非常频繁地执行 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 子句对于回滚期间游标发生什么事情没有影响。一旦游标关闭,则所有相关的锁也将被释放。

阅读(127343) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


识别游标的类型

游标有三个主要特征:

  • 游标的类型(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 语句成功完成开始。默认情况下,当游标关闭,或者执行提交时,游标的作用域随之结束。在下一节中可以看到,通过提交来结束游标的作用域有一定的害处,但是有一种方法可以避免。





回页首


通常,应用程序应该非常频繁地执行 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 子句对于回滚期间游标发生什么事情没有影响。一旦游标关闭,则所有相关的锁也将被释放。

阅读(127342) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


识别游标的类型

游标有三个主要特征:

  • 游标的类型(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 语句成功完成开始。默认情况下,当游标关闭,或者执行提交时,游标的作用域随之结束。在下一节中可以看到,通过提交来结束游标的作用域有一定的害处,但是有一种方法可以避免。





回页首


通常,应用程序应该非常频繁地执行 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 子句对于回滚期间游标发生什么事情没有影响。一旦游标关闭,则所有相关的锁也将被释放。

阅读(127341) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


识别游标的类型

游标有三个主要特征:

  • 游标的类型(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 语句成功完成开始。默认情况下,当游标关闭,或者执行提交时,游标的作用域随之结束。在下一节中可以看到,通过提交来结束游标的作用域有一定的害处,但是有一种方法可以避免。





回页首


通常,应用程序应该非常频繁地执行 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 子句对于回滚期间游标发生什么事情没有影响。一旦游标关闭,则所有相关的锁也将被释放。

阅读(127340) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


识别游标的类型

游标有三个主要特征:

  • 游标的类型(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 语句成功完成开始。默认情况下,当游标关闭,或者执行提交时,游标的作用域随之结束。在下一节中可以看到,通过提交来结束游标的作用域有一定的害处,但是有一种方法可以避免。





回页首


通常,应用程序应该非常频繁地执行 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 子句对于回滚期间游标发生什么事情没有影响。一旦游标关闭,则所有相关的锁也将被释放。

阅读(127339) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


识别游标的类型

游标有三个主要特征:

  • 游标的类型(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 语句成功完成开始。默认情况下,当游标关闭,或者执行提交时,游标的作用域随之结束。在下一节中可以看到,通过提交来结束游标的作用域有一定的害处,但是有一种方法可以避免。





回页首


通常,应用程序应该非常频繁地执行 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 子句对于回滚期间游标发生什么事情没有影响。一旦游标关闭,则所有相关的锁也将被释放。

阅读(127338) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


识别游标的类型

游标有三个主要特征:

  • 游标的类型(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 语句成功完成开始。默认情况下,当游标关闭,或者执行提交时,游标的作用域随之结束。在下一节中可以看到,通过提交来结束游标的作用域有一定的害处,但是有一种方法可以避免。





回页首


通常,应用程序应该非常频繁地执行 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 子句对于回滚期间游标发生什么事情没有影响。一旦游标关闭,则所有相关的锁也将被释放。

阅读(127337) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


识别游标的类型

游标有三个主要特征:

  • 游标的类型(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 语句成功完成开始。默认情况下,当游标关闭,或者执行提交时,游标的作用域随之结束。在下一节中可以看到,通过提交来结束游标的作用域有一定的害处,但是有一种方法可以避免。





回页首


通常,应用程序应该非常频繁地执行 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 子句对于回滚期间游标发生什么事情没有影响。一旦游标关闭,则所有相关的锁也将被释放。

阅读(127336) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


识别游标的类型

游标有三个主要特征:

  • 游标的类型(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 语句成功完成开始。默认情况下,当游标关闭,或者执行提交时,游标的作用域随之结束。在下一节中可以看到,通过提交来结束游标的作用域有一定的害处,但是有一种方法可以避免。





回页首


通常,应用程序应该非常频繁地执行 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 子句对于回滚期间游标发生什么事情没有影响。一旦游标关闭,则所有相关的锁也将被释放。

阅读(127335) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


识别游标的类型

游标有三个主要特征:

  • 游标的类型(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 语句成功完成开始。默认情况下,当游标关闭,或者执行提交时,游标的作用域随之结束。在下一节中可以看到,通过提交来结束游标的作用域有一定的害处,但是有一种方法可以避免。





回页首


通常,应用程序应该非常频繁地执行 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 子句对于回滚期间游标发生什么事情没有影响。一旦游标关闭,则所有相关的锁也将被释放。

阅读(127334) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


识别游标的类型

游标有三个主要特征:

  • 游标的类型(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 语句成功完成开始。默认情况下,当游标关闭,或者执行提交时,游标的作用域随之结束。在下一节中可以看到,通过提交来结束游标的作用域有一定的害处,但是有一种方法可以避免。





回页首


通常,应用程序应该非常频繁地执行 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 子句对于回滚期间游标发生什么事情没有影响。一旦游标关闭,则所有相关的锁也将被释放。

阅读(127333) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


识别游标的类型

游标有三个主要特征:

  • 游标的类型(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 语句成功完成开始。默认情况下,当游标关闭,或者执行提交时,游标的作用域随之结束。在下一节中可以看到,通过提交来结束游标的作用域有一定的害处,但是有一种方法可以避免。





回页首


通常,应用程序应该非常频繁地执行 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 子句对于回滚期间游标发生什么事情没有影响。一旦游标关闭,则所有相关的锁也将被释放。

阅读(127332) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


识别游标的类型

游标有三个主要特征:

  • 游标的类型(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 语句成功完成开始。默认情况下,当游标关闭,或者执行提交时,游标的作用域随之结束。在下一节中可以看到,通过提交来结束游标的作用域有一定的害处,但是有一种方法可以避免。





回页首


通常,应用程序应该非常频繁地执行 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 子句对于回滚期间游标发生什么事情没有影响。一旦游标关闭,则所有相关的锁也将被释放。

阅读(127331) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


识别游标的类型

游标有三个主要特征:

  • 游标的类型(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 语句成功完成开始。默认情况下,当游标关闭,或者执行提交时,游标的作用域随之结束。在下一节中可以看到,通过提交来结束游标的作用域有一定的害处,但是有一种方法可以避免。





回页首


通常,应用程序应该非常频繁地执行 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 子句对于回滚期间游标发生什么事情没有影响。一旦游标关闭,则所有相关的锁也将被释放。

阅读(127330) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


识别游标的类型

游标有三个主要特征:

  • 游标的类型(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 语句成功完成开始。默认情况下,当游标关闭,或者执行提交时,游标的作用域随之结束。在下一节中可以看到,通过提交来结束游标的作用域有一定的害处,但是有一种方法可以避免。





回页首


通常,应用程序应该非常频繁地执行 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 子句对于回滚期间游标发生什么事情没有影响。一旦游标关闭,则所有相关的锁也将被释放。

阅读(127329) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


识别游标的类型

游标有三个主要特征:

  • 游标的类型(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 语句成功完成开始。默认情况下,当游标关闭,或者执行提交时,游标的作用域随之结束。在下一节中可以看到,通过提交来结束游标的作用域有一定的害处,但是有一种方法可以避免。





回页首


通常,应用程序应该非常频繁地执行 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 子句对于回滚期间游标发生什么事情没有影响。一旦游标关闭,则所有相关的锁也将被释放。

阅读(127328) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


识别游标的类型

游标有三个主要特征:

  • 游标的类型(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 语句成功完成开始。默认情况下,当游标关闭,或者执行提交时,游标的作用域随之结束。在下一节中可以看到,通过提交来结束游标的作用域有一定的害处,但是有一种方法可以避免。





回页首


通常,应用程序应该非常频繁地执行 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 子句对于回滚期间游标发生什么事情没有影响。一旦游标关闭,则所有相关的锁也将被释放。

阅读(127327) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


识别游标的类型

游标有三个主要特征:

  • 游标的类型(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 语句成功完成开始。默认情况下,当游标关闭,或者执行提交时,游标的作用域随之结束。在下一节中可以看到,通过提交来结束游标的作用域有一定的害处,但是有一种方法可以避免。





回页首


通常,应用程序应该非常频繁地执行 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 子句对于回滚期间游标发生什么事情没有影响。一旦游标关闭,则所有相关的锁也将被释放。

阅读(127326) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


识别游标的类型

游标有三个主要特征:

  • 游标的类型(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 语句成功完成开始。默认情况下,当游标关闭,或者执行提交时,游标的作用域随之结束。在下一节中可以看到,通过提交来结束游标的作用域有一定的害处,但是有一种方法可以避免。





回页首


通常,应用程序应该非常频繁地执行 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 子句对于回滚期间游标发生什么事情没有影响。一旦游标关闭,则所有相关的锁也将被释放。

阅读(127325) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


识别游标的类型

游标有三个主要特征:

  • 游标的类型(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 语句成功完成开始。默认情况下,当游标关闭,或者执行提交时,游标的作用域随之结束。在下一节中可以看到,通过提交来结束游标的作用域有一定的害处,但是有一种方法可以避免。





回页首


通常,应用程序应该非常频繁地执行 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 子句对于回滚期间游标发生什么事情没有影响。一旦游标关闭,则所有相关的锁也将被释放。

阅读(127324) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


识别游标的类型

游标有三个主要特征:

  • 游标的类型(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 语句成功完成开始。默认情况下,当游标关闭,或者执行提交时,游标的作用域随之结束。在下一节中可以看到,通过提交来结束游标的作用域有一定的害处,但是有一种方法可以避免。





回页首


通常,应用程序应该非常频繁地执行 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 子句对于回滚期间游标发生什么事情没有影响。一旦游标关闭,则所有相关的锁也将被释放。

阅读(127323) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


识别游标的类型

游标有三个主要特征:

  • 游标的类型(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 语句成功完成开始。默认情况下,当游标关闭,或者执行提交时,游标的作用域随之结束。在下一节中可以看到,通过提交来结束游标的作用域有一定的害处,但是有一种方法可以避免。





回页首


通常,应用程序应该非常频繁地执行 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 子句对于回滚期间游标发生什么事情没有影响。一旦游标关闭,则所有相关的锁也将被释放。

阅读(127322) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


识别游标的类型

游标有三个主要特征:

  • 游标的类型(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 语句成功完成开始。默认情况下,当游标关闭,或者执行提交时,游标的作用域随之结束。在下一节中可以看到,通过提交来结束游标的作用域有一定的害处,但是有一种方法可以避免。





回页首


通常,应用程序应该非常频繁地执行 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 子句对于回滚期间游标发生什么事情没有影响。一旦游标关闭,则所有相关的锁也将被释放。

阅读(127321) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


识别游标的类型

游标有三个主要特征:

  • 游标的类型(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 语句成功完成开始。默认情况下,当游标关闭,或者执行提交时,游标的作用域随之结束。在下一节中可以看到,通过提交来结束游标的作用域有一定的害处,但是有一种方法可以避免。





回页首


通常,应用程序应该非常频繁地执行 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 子句对于回滚期间游标发生什么事情没有影响。一旦游标关闭,则所有相关的锁也将被释放。

阅读(127320) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


识别游标的类型

游标有三个主要特征:

  • 游标的类型(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 语句成功完成开始。默认情况下,当游标关闭,或者执行提交时,游标的作用域随之结束。在下一节中可以看到,通过提交来结束游标的作用域有一定的害处,但是有一种方法可以避免。





回页首


通常,应用程序应该非常频繁地执行 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 子句对于回滚期间游标发生什么事情没有影响。一旦游标关闭,则所有相关的锁也将被释放。

阅读(127319) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


识别游标的类型

游标有三个主要特征:

  • 游标的类型(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 语句成功完成开始。默认情况下,当游标关闭,或者执行提交时,游标的作用域随之结束。在下一节中可以看到,通过提交来结束游标的作用域有一定的害处,但是有一种方法可以避免。





回页首


通常,应用程序应该非常频繁地执行 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 子句对于回滚期间游标发生什么事情没有影响。一旦游标关闭,则所有相关的锁也将被释放。

阅读(127318) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


识别游标的类型

游标有三个主要特征:

  • 游标的类型(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 语句成功完成开始。默认情况下,当游标关闭,或者执行提交时,游标的作用域随之结束。在下一节中可以看到,通过提交来结束游标的作用域有一定的害处,但是有一种方法可以避免。





回页首


通常,应用程序应该非常频繁地执行 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 子句对于回滚期间游标发生什么事情没有影响。一旦游标关闭,则所有相关的锁也将被释放。

阅读(127317) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


识别游标的类型

游标有三个主要特征:

  • 游标的类型(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 语句成功完成开始。默认情况下,当游标关闭,或者执行提交时,游标的作用域随之结束。在下一节中可以看到,通过提交来结束游标的作用域有一定的害处,但是有一种方法可以避免。





回页首


通常,应用程序应该非常频繁地执行 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 子句对于回滚期间游标发生什么事情没有影响。一旦游标关闭,则所有相关的锁也将被释放。

阅读(127316) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


识别游标的类型

游标有三个主要特征:

  • 游标的类型(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 语句成功完成开始。默认情况下,当游标关闭,或者执行提交时,游标的作用域随之结束。在下一节中可以看到,通过提交来结束游标的作用域有一定的害处,但是有一种方法可以避免。





回页首


通常,应用程序应该非常频繁地执行 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 子句对于回滚期间游标发生什么事情没有影响。一旦游标关闭,则所有相关的锁也将被释放。

阅读(127315) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


识别游标的类型

游标有三个主要特征:

  • 游标的类型(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 语句成功完成开始。默认情况下,当游标关闭,或者执行提交时,游标的作用域随之结束。在下一节中可以看到,通过提交来结束游标的作用域有一定的害处,但是有一种方法可以避免。





回页首


通常,应用程序应该非常频繁地执行 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 子句对于回滚期间游标发生什么事情没有影响。一旦游标关闭,则所有相关的锁也将被释放。

阅读(127314) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


识别游标的类型

游标有三个主要特征:

  • 游标的类型(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 语句成功完成开始。默认情况下,当游标关闭,或者执行提交时,游标的作用域随之结束。在下一节中可以看到,通过提交来结束游标的作用域有一定的害处,但是有一种方法可以避免。





回页首


通常,应用程序应该非常频繁地执行 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 子句对于回滚期间游标发生什么事情没有影响。一旦游标关闭,则所有相关的锁也将被释放。

阅读(127313) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


识别游标的类型

游标有三个主要特征:

  • 游标的类型(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 语句成功完成开始。默认情况下,当游标关闭,或者执行提交时,游标的作用域随之结束。在下一节中可以看到,通过提交来结束游标的作用域有一定的害处,但是有一种方法可以避免。





回页首


通常,应用程序应该非常频繁地执行 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 子句对于回滚期间游标发生什么事情没有影响。一旦游标关闭,则所有相关的锁也将被释放。

阅读(127312) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


识别游标的类型

游标有三个主要特征:

  • 游标的类型(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 语句成功完成开始。默认情况下,当游标关闭,或者执行提交时,游标的作用域随之结束。在下一节中可以看到,通过提交来结束游标的作用域有一定的害处,但是有一种方法可以避免。





回页首


通常,应用程序应该非常频繁地执行 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 子句对于回滚期间游标发生什么事情没有影响。一旦游标关闭,则所有相关的锁也将被释放。

阅读(127311) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


识别游标的类型

游标有三个主要特征:

  • 游标的类型(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 语句成功完成开始。默认情况下,当游标关闭,或者执行提交时,游标的作用域随之结束。在下一节中可以看到,通过提交来结束游标的作用域有一定的害处,但是有一种方法可以避免。





回页首


通常,应用程序应该非常频繁地执行 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 子句对于回滚期间游标发生什么事情没有影响。一旦游标关闭,则所有相关的锁也将被释放。

阅读(127310) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


识别游标的类型

游标有三个主要特征:

  • 游标的类型(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 语句成功完成开始。默认情况下,当游标关闭,或者执行提交时,游标的作用域随之结束。在下一节中可以看到,通过提交来结束游标的作用域有一定的害处,但是有一种方法可以避免。





回页首


通常,应用程序应该非常频繁地执行 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 子句对于回滚期间游标发生什么事情没有影响。一旦游标关闭,则所有相关的锁也将被释放。

阅读(127309) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


识别游标的类型

游标有三个主要特征:

  • 游标的类型(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 语句成功完成开始。默认情况下,当游标关闭,或者执行提交时,游标的作用域随之结束。在下一节中可以看到,通过提交来结束游标的作用域有一定的害处,但是有一种方法可以避免。





回页首


通常,应用程序应该非常频繁地执行 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 子句对于回滚期间游标发生什么事情没有影响。一旦游标关闭,则所有相关的锁也将被释放。

阅读(127308) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


识别游标的类型

游标有三个主要特征:

  • 游标的类型(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 语句成功完成开始。默认情况下,当游标关闭,或者执行提交时,游标的作用域随之结束。在下一节中可以看到,通过提交来结束游标的作用域有一定的害处,但是有一种方法可以避免。





回页首


通常,应用程序应该非常频繁地执行 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 子句对于回滚期间游标发生什么事情没有影响。一旦游标关闭,则所有相关的锁也将被释放。

阅读(127307) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


识别游标的类型

游标有三个主要特征:

  • 游标的类型(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 语句成功完成开始。默认情况下,当游标关闭,或者执行提交时,游标的作用域随之结束。在下一节中可以看到,通过提交来结束游标的作用域有一定的害处,但是有一种方法可以避免。





回页首


通常,应用程序应该非常频繁地执行 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 子句对于回滚期间游标发生什么事情没有影响。一旦游标关闭,则所有相关的锁也将被释放。

阅读(127306) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


识别游标的类型

游标有三个主要特征:

  • 游标的类型(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 语句成功完成开始。默认情况下,当游标关闭,或者执行提交时,游标的作用域随之结束。在下一节中可以看到,通过提交来结束游标的作用域有一定的害处,但是有一种方法可以避免。





回页首


通常,应用程序应该非常频繁地执行 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 子句对于回滚期间游标发生什么事情没有影响。一旦游标关闭,则所有相关的锁也将被释放。

阅读(127305) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


识别游标的类型

游标有三个主要特征:

  • 游标的类型(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 语句成功完成开始。默认情况下,当游标关闭,或者执行提交时,游标的作用域随之结束。在下一节中可以看到,通过提交来结束游标的作用域有一定的害处,但是有一种方法可以避免。





回页首


通常,应用程序应该非常频繁地执行 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 子句对于回滚期间游标发生什么事情没有影响。一旦游标关闭,则所有相关的锁也将被释放。

阅读(127304) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


识别游标的类型

游标有三个主要特征:

  • 游标的类型(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 语句成功完成开始。默认情况下,当游标关闭,或者执行提交时,游标的作用域随之结束。在下一节中可以看到,通过提交来结束游标的作用域有一定的害处,但是有一种方法可以避免。





回页首


通常,应用程序应该非常频繁地执行 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 子句对于回滚期间游标发生什么事情没有影响。一旦游标关闭,则所有相关的锁也将被释放。

阅读(127303) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


识别游标的类型

游标有三个主要特征:

  • 游标的类型(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 语句成功完成开始。默认情况下,当游标关闭,或者执行提交时,游标的作用域随之结束。在下一节中可以看到,通过提交来结束游标的作用域有一定的害处,但是有一种方法可以避免。





回页首


通常,应用程序应该非常频繁地执行 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 子句对于回滚期间游标发生什么事情没有影响。一旦游标关闭,则所有相关的锁也将被释放。

阅读(127302) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


识别游标的类型

游标有三个主要特征:

  • 游标的类型(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 语句成功完成开始。默认情况下,当游标关闭,或者执行提交时,游标的作用域随之结束。在下一节中可以看到,通过提交来结束游标的作用域有一定的害处,但是有一种方法可以避免。





回页首


通常,应用程序应该非常频繁地执行 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 子句对于回滚期间游标发生什么事情没有影响。一旦游标关闭,则所有相关的锁也将被释放。

阅读(127301) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


识别游标的类型

游标有三个主要特征:

  • 游标的类型(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 语句成功完成开始。默认情况下,当游标关闭,或者执行提交时,游标的作用域随之结束。在下一节中可以看到,通过提交来结束游标的作用域有一定的害处,但是有一种方法可以避免。





回页首


通常,应用程序应该非常频繁地执行 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 子句对于回滚期间游标发生什么事情没有影响。一旦游标关闭,则所有相关的锁也将被释放。

阅读(127300) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


识别游标的类型

游标有三个主要特征:

  • 游标的类型(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 语句成功完成开始。默认情况下,当游标关闭,或者执行提交时,游标的作用域随之结束。在下一节中可以看到,通过提交来结束游标的作用域有一定的害处,但是有一种方法可以避免。





回页首


通常,应用程序应该非常频繁地执行 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 子句对于回滚期间游标发生什么事情没有影响。一旦游标关闭,则所有相关的锁也将被释放。

阅读(127299) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


识别游标的类型

游标有三个主要特征:

  • 游标的类型(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 语句成功完成开始。默认情况下,当游标关闭,或者执行提交时,游标的作用域随之结束。在下一节中可以看到,通过提交来结束游标的作用域有一定的害处,但是有一种方法可以避免。





回页首


通常,应用程序应该非常频繁地执行 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 子句对于回滚期间游标发生什么事情没有影响。一旦游标关闭,则所有相关的锁也将被释放。

阅读(127298) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


识别游标的类型

游标有三个主要特征:

  • 游标的类型(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 语句成功完成开始。默认情况下,当游标关闭,或者执行提交时,游标的作用域随之结束。在下一节中可以看到,通过提交来结束游标的作用域有一定的害处,但是有一种方法可以避免。





回页首


通常,应用程序应该非常频繁地执行 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 子句对于回滚期间游标发生什么事情没有影响。一旦游标关闭,则所有相关的锁也将被释放。

阅读(127297) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


识别游标的类型

游标有三个主要特征:

  • 游标的类型(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 语句成功完成开始。默认情况下,当游标关闭,或者执行提交时,游标的作用域随之结束。在下一节中可以看到,通过提交来结束游标的作用域有一定的害处,但是有一种方法可以避免。





回页首


通常,应用程序应该非常频繁地执行 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 子句对于回滚期间游标发生什么事情没有影响。一旦游标关闭,则所有相关的锁也将被释放。

阅读(127296) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


识别游标的类型

游标有三个主要特征:

  • 游标的类型(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 语句成功完成开始。默认情况下,当游标关闭,或者执行提交时,游标的作用域随之结束。在下一节中可以看到,通过提交来结束游标的作用域有一定的害处,但是有一种方法可以避免。





回页首


通常,应用程序应该非常频繁地执行 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 子句对于回滚期间游标发生什么事情没有影响。一旦游标关闭,则所有相关的锁也将被释放。

阅读(127295) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~