科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道使用脚本加速 DB2 存储过程的开发

使用脚本加速 DB2 存储过程的开发

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本文主要讨论使用 Windows 脚本与 DB2 交互的一些常用技巧和方法。介绍了利用 Windows 的脚本(批处理程序)连接数据库,查询表结构,UDF 之间的引用关系,存储过程中使用了哪些表等等。

来源:IT专家网 2008年6月3日

关键字: IBM 数据库 DB2

  • 评论
  • 分享微博
  • 分享邮件
清单 5. dep.bat ――使用脚本获得依赖某个表的所有存储过程,UDF 和视图
                1.	@echo off
2.	mkdir logs
3.	set logfile=logs\%2.dep.txt
4.	echo --- dependent SPs --- >> %logfile%
5.	db2 "select r.routineschema, r.routinename  from syscat.routines r, 
syscat.packagedep pdep where pdep.bname=upper('%2') and pdep.bschema=upper('%1') 
and pdep.pkgname = 'p'||substr(char(r.lib_id+10000000),2) " >> %logfile%
6.	echo --- dependent UDF --- >> %logfile%
7.	db2 select routineschema, routinename from syscat.routinedep 
where bschema = upper('%1')  and bname = upper('%2') and btype ='T' 
order by bname >> %logfile%
8.	echo --- dependent view --- >> %logfile%
9.	db2 select viewschema, viewname from syscat.viewdep 
where bschema = upper('%1')  and bname = upper('%2') and btype ='T' 
order by bname >> %logfile%
10.	start %logfile%

脚本第 5 行是获得依赖某表的存储过程。因为存储过程会被编译成包(package)。所以,存储过程和表的依赖关系实际上是存储过程对应的包(package)和表之间的依赖关系。这种关系被记录在 syscat.packagedep 视图中。同样的,我们可以通过查询 syscat.routinedep 和 syscat.viewdep 视图,获得 UDF 和表,视图和表之间的依赖关系。

开发实例

使用上面的脚本,进行数据库开发就会很方便。下面我们看一个开发的例子。

需求描述

由于业务变更,我们的《订单管理系统》中的表 MIS.ORDER 需要加一个字段 GOV_FLAG SMALLINT 来标识是否是政府订单,如果是则需要执行特殊的折扣政策。同时需要去除冗余字段 ORDER_PRICE_TOT DECIMAL(19,4)。

需求描述

开发过程

我们需要修改相应的表,存储过程和 UDF 的 SQL 文件,并把它们重新装载到开发数据库和集成测试数据库中。并需要保留表中原有数据。

假设我们有两个数据库,一个是名为 dev 的开发数据库,一个是名为 test 的集成测试数据库。只有项目组长拥有在 test 数据库上执行的权限,开发人员只可以在 dev 数据库上执行操作。

首先项目组长会分析需求,制定任务分配;然后开发人员根据任务分配编写相应的 SQL 和脚本文件,并且在 dev 数据库上进行装载和测试;最后项目组长把开发人员提交的脚本文件汇总起来,在 test 数据库上进行装载和测试。

1. 项目组长

项目组长需要把这个任务分配给组员去完成。首先组长使用脚本 viewtable MIS ORDER 查看一下当前在数据库中表的结构,检查添加的字段是否会和其他字段有冲突。然后项目组长使用脚本 dep MIS ORDER 获得依赖表 MIS.ORDER 的所有 DB2 对象。经过分析这些依赖对象,项目组长发现,表结构的修改会导致存储过程 MIS.SP_ADD_ORDER、UDF MIS.F_CHECK_ORDER 和视图 MIS.V_ORDER 的修改,并会导致两个存储过程需要 rebind。分析结果汇总如下表 8 所示:


表 8. 项目组长的分析结果

名称 执行操作 备注
MIS.SP_ADD_ORDER 修改
MIS.SP_UPDATE_ORDER rebind 没有使用要删除的字段,不必修改
MIS.SP_ADD_ORDER rebind 没有使用要删除的字段,不必修改
MIS.F_CHECK_ORDER 修改
MIS.V_ORDER 修改

于是项目组长进行如表 9 的任务分配。


表 9. 项目组长制定的任务分配

编号 任务 执行人 前提条件 完成标志
10 修改 ORDER.SQL,在 MIS.ORDER 中:
  • 添加一个字段 GOV_FLAG SMALLINT;
  • 去除冗余字段 ORDER_PRICE_TOT DECIMAL(19,4);
  • 备注:在删除原表前,需要首先删除依赖该表的 UDF 和视图。创建新表后,需要把除了 MIS.F_CHECK_ORDER 和 MIS.V_ORDER 以外的其他的 UDF 等重新装载到数据库中,并且 rebind 存储过程 MIS.SP_UPDATE_ORDER 和 MIS.SP_SELECT_ORDER。
A
  • 项目组长检查完毕 SQL 脚本;
  • 在开发数据库实例 db2dev 上创建和测试成功。
20 根据新的 MIS.ORDER 表结构修改储存过程: SP_ADD_ORDER.SQL B 任务 10 完成
  • 项目组长检查完毕 SQL 脚本;
  • 在开发数据库实例 db2dev 上创建和测试成功。
30
  • 根据 MIS.ORDER 表结构修改 UDF F_CHECK_ORDER.SQL 和视图 V_ORDER.SQL
  • 备注:请先删除依赖它们的 DB2 对象,并重新装载它们,使它们的状态合法。
C 任务 10 完成
  • 项目组长检查完毕 SQL 脚本;
  • 在开发数据库实例 db2dev 上创建和测试成功。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章