科技行者

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

知识库

知识库 安全导航

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

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

  • 扫一扫
    分享文章到微信

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

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

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

关键字: IBM 数据库 DB2

  • 评论
  • 分享微博
  • 分享邮件
清单 2. esql.bat――执行SQL文件
                1.	@echo off
2.	if {%2} =={} goto setlog
3.	set LogFile=%2
4.	goto exe
5.	rem 如果没有指定输出文件,设置默认输出文件
6.	:setlog
7.	set LogFile=logs\run.log
8.	
9.	:exe
10.	echo %LogFile%
11.	echo --------------------- execute file:%1-------------------- >> %LogFile%
12.	db2 values(current time) >> %LogFile%
13.	db2 -td@ -f %1 -z %LogFile%
14.	db2 values(current time) >> %LogFile%
15.	pause

其中 –td@ 选项表示 SQL 文件中各 SQL 语句间的分割符为 @。–z 选项可以使 sql 的执行结果输出到指定的 Log 文件中。这里我们使用 -z 而不使用脚本中的管道符号(>)是因为 -z 不仅可以把执行结果记录到指定的文件中,同时还会在控制台上显示,这样即方便我们在执行 sql 的时候实时掌握 sql 运行情况,又可以在 log 中查找分析 sql 执行情况。

该脚本需要两个参数,第一个参数指明要执行的 sql 文件,第二个参数指明 log 文件名称,该参数可选。在脚本的第 12 行,第 14 行,我们使用 values(current time) 来记录脚本执行的开始时间和结束时间。这样可以帮助我们计算出脚本执行完毕需要多长时间。

第 3 个批处理脚本的作用是获得表定义,包括字段属性、主键、前 20 条记录,如果是视图,显示其创建语句,并显示视图中包含的表。如清单 3 所示。它的使用方法是 viewtable schema tablename

清单 3. viewtable.bat ――获得表定义
                1.	@echo off
2.	mkdir logs
3.	set logfile=logs\view_%2.txt
4.	db2 describe table %1.%2 show detail >%logfile%
5.	echo  -----------------------below is (are) pk-------------------------  >>%logfile%
6.	db2 "select substr(colname,1,30) as pk from syscat.columns 
where keyseq is not null and tabschema=upper('%1')
and tabname = upper('%2')" >>%logfile%
7.	echo  ---------------below are the fisrt 20 rows in the %1.%2 table----  >>%logfile%
8.	db2 select * from %1.%2 fetch first 20 rows only >>%logfile%
9.	echo  -----------------------below is the sql of the %1.%2 view ---------  >>%logfile%
10.	db2 "select varchar(text,32670) from syscat.views 
where viewschema=upper('%1')and viewname = upper('%2')" >>%logfile%
11.	echo  ---------------below are tables  of the %1.%2 view ---------  >>%logfile%
12.	db2 "select distinct bname from syscat.viewdep 
where viewname= upper('%1')  and btype='T'" >>%logfile%
13.	start %logfile%

脚本中第 4 行的 describe 命令用于显示数据库表或视图的结构。包括字段名称,数据类型等。第 6 行用于查出表中的主键。视图 syscat.columns 中的 keyseq 字段表明了该字段在表的主键的顺序,为空表示该字段不是表的主键。第 8 行是获得表或视图中的前 20 条记录,便于我们对其分析。第 10 行是获得视图的 SQL 定义。第 12 行获得视图中依赖的表。

第 4 个批处理脚本的作用是查看存储过程或 UDF 的定义。如清单 4 所示。它的使用方法是 view spname

清单 4. view.bat ――查看存储过程或 UDF 的定义
                1.	@echo off
2.	set logfile=logs\view_%1.sql
3.	db2 select varchar(text,32670)  from syscat.routines 
where routinename=upper('%1') > %logfile%
4.	echo  -----------------------below are tables used by %1 ---------  >>%logfile%
5.	db2 select bname from syscat.packagedep 
where (btype='T' or btype='V') and pkgname in
(select bname from sysibm.sysdependencies where dname =upper('%1')) >> %logfile%
6.	
7.	start %logfile%

在脚本中我们之所以使用 VARCHAR 函数来格式 TEXT 字段中的内容,是因为 TEXT 字段是 CLOB 类型,其存储的存储过程或 UDF 的创建语句的字符比较多。如果我们不使用 VARCHAR 函数进行格式化,DB2 就会使用默认的 CHAR 函数(CHAR 的最大长度是 254)对其格式化,这样返回的 SQL 创建语句就可能被截去后面的部分。

第 5 行中脚本首先获得依赖某存储过程的所有的包(package)名,然后查找依赖这些包的所有的表和视图。这样就可以获得存储过程中使用的表和视图。

第 4 个批处理脚本的作用是使用脚本获得依赖某个表的所有存储过程,UDF 和视图。如清单 5 所示。它的使用方法是 dep schema spname

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

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

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