减少与 DB2 for z/OS 的会话:第 2 部分(更多经过检验的基础知识和一些新的编程技巧)
2010-06-16 00:00:00 来源:WEB开发网记住,如果部门数少于 20 个(比如 15),您不需要编码动态 SQL,您可以在 16 到 20 个主机变量中保留最新的值。
在更新/删除 —— 获取/更新/获取/更新之前读取行
更有经验的程序员必须克服一些根深蒂固的做法。在以前的日子里,我们必须读取记录来更新或删除。使用 DB2,如果您不需要建立在之前的图像,就不需要读取行来更新和删除它。我常常看到一些批处理程序使用指针获取、更新、获取、更新、获取、更新...,您要做的只是使用 Declare Cursor 中相同的 Where 子句执行合理大小的 SET 更新。而不是:
Declare CursorUpd for
Select col1, col2, ...
From tableA
Where jobcode = :hvj for update of salary
Fetch CursorUpd into :hvcol1, :hvcol2, ...
Update salary set salary = salary + 1000.00 where current of CursorUpd
如果需要重复进行获取、更新、获取更新,为什么不:
Update tableA
Set salary = salary + 1000.00
Where jobcode = :hvj
SET 处理是关系设计的最大优势之一。您当然必须确保 SET 大小没有使用锁定级联创建无法接受的恢复单元或问题,或者导致其他并发运行程序的锁定问题(比如超时)。
有时候我看到一些上述场景(获取、更新)混合了更新行的一个后续单一实例 SELECT —— 之前读取,更新,之后查看。使用最新的编程技术,同时意识到不需要查看之前图像,我们可以 DECLARE 一个行定位指针,来 SELECT 我们的 SET update,然后 FETCH 一个合理大小的行集合(比如一次 100 行),以查看维护的结果。
单行获取的使用很少。当您可以连接一次就看到 100 行时为何要连接 100 次?
请关注第 3 部分
在下一期中,我将继续本主题的最后部分,我们将查看更多(更新)的技术,来避免或减少与 DB2 的连接。
- ››db2 对float类型取char后显示科学计数法
- ››DB2中出现SQL1032N错误现象时的解决办法
- ››DB2 锁升级示例
- ››db2诊断系列之---定位锁等待问题
- ››Form Reset Function
- ››db2 命令选项解释
- ››FOREACH 宏之GCC实现
- ››DB2 最佳实践: 使用 DB2 pureXML 管理 XML 数据的...
- ››DB2 9.5 SQL Procedure Developer 认证考试 735 准...
- ››DB2 9.5 SQL Procedure Developer 认证考试 735 准...
- ››DB2 9.5 SQL Procedure Developer 认证考试 735 准...
- ››DB2 基础: 表空间和缓冲池
更多精彩
赞助商链接