DB2 预填充脚本生成器

一种创建插入元数据脚本的便捷方式

了解一种实用工具,用于从表中的现有数据为 DB2® 创建预填充脚本。该实用工具也可用于创建插入脚本。本文中包含了该实用工具的示例代码。

Shishir Narain (nshishir@in.ibm.com), 软件工程师, IBM

Shishir Narain 是 Websphere Partner Gateway 团队的数据库开发人员,本文是他在项目中所遇到实际问题的解决成果。他拥有工业和管理工程学硕士学位,并具有超过 8 年的软件业界经验。他通常把和儿子玩耍以外的时间花费在 “测试 Internet” 上。



2006 年 9 月 20 日

简介

大多数业务应用程序需要在使用前数据已预填充到数据库中。通常,预填充信息可来自电子表格、平面文件或其他文件。数据然后会被抽象为结构化查询语言 (SQL) 脚本的形式,如果预填充数据量大的话,这将是一个冗长的任务。

在这样的情况下,可结合使用本文描述的示例应用程序和 LOAD 实用工具来非常便捷地生成脚本。同样,在我们具有表数据并想为之创建插入语句的情况下也可使用该程序。该生成器程序将脚本写到可用于跨平台和跨服务器进行数据填充的文件中。

大多数集成开发环境 (IDE) 都具有类似的特性,但您可从 DB2 命令提示符下简单地使用这个示例程序。该程序的其他独特特征包括:

  1. 定制程序的能力:源代码包含在本文的 下载 中。
  2. 排除列的能力:生成数据时,您可以排除某些列,从而脚本将不会为这些列生成数据。
  3. 包含 WHERE 子句的能力:程序允许您基于条件对行进行限制。

前提条件和局限性

  • DB2 8.1.2 或以上版本
  • 在文章 “从 SQL 中进行文件输出和调试的 UDF”(developerWorks,2003 年 2 月)中描述的 PUT LINE 用户定义函数(UDF)。文中所述的 UDF 用于在文件中编写脚本。请访问如何安装和使用 UDF 的链接。这篇文章也说明了如何覆盖默认的文件创建位置。

该实用工具的局限性如下:

  • 不能选择 LOB 及其变体列。
  • 该实用工具还没有进行过全球化测试。
  • 该实用工具目前只能处理有限的数据类型。当为所期望的数据类型添加程序逻辑后,该程序功能可得到加强。请参见源代码获取详细信息。

经过测试的环境

该实用工具已经在下列平台的单个分区数据库中进行了测试:

  • Windows 2000 SP4: DB2 V8.1.2
  • Windows 2000 SP4: DB2 V8.2
  • Win XP: DB2 V8.2 Viper RC1
  • Linux AS3, DB2 V8.2

脚本简介

该脚本按照提供的条件从表中获得数据。然后用这些数据构造 SQL 文件,保护数据类型,并使用 Izuha 的文件编写工具写入输出文件。下面是该过程的创建语句:

清单 1. 创建插入存储过程
CREATE PROCEDURE Create_Inserts(
 IN   p_Table_Name    VARCHAR(100)
,IN   p_file_name     VARCHAR(100)
,IN   p_exclude_cols  VARCHAR(100)
,IN   p_where         VARCHAR(500)
,OUT  p_message       VARCHAR(100)
                                )

安装

  • Windows

    遵循以下步骤,准备在 Windows 上使用该脚本:

    1. 下载 本文中的 create_inserts.zip,解压到适当的目录,并转到该目录。
    2. 打开 DB2 命令窗口并建立数据库连接。
    3. 使用包含在 create_inserts.zip 中的 create_inserts.sql 文件,将该过程添加到数据库中:

      db2 connect to database user username using password
      
      db2 -td/ create_inserts.sql
  • UNIX

    遵循以下步骤,准备在 UNIX 上使用该脚本:

    1. 下载 create_inserts.tar 并解压 tar 文件。
    2. 作为 db2 实例用户连接数据库。
    3. 使用包含在 create_inserts.tar 中的 create_inserts.sql 文件,将该过程添加到数据库中:

      tar -xvf create_inserts.tar
      
      db2 connect to database user username using password
      
      db2 -td/ create_inserts.sql

使用实用工具

程序采用下列输入:

  1. 表名称:需要为之创建插入脚本的表的名称。
  2. 文件名:由 UDF 用于编写脚本的文件的名称。
  3. 排除列:您希望被排除的列名称可以为空。
  4. Where 子句:数据提取的限制条件可以为空。

程序使用提供的信息构造查询,然后检索数据、进行格式化,并把数据写入输出文件。程序会返回一条输出消息,反映生成过程是否成功完成。


示例

示例引用 DB2 附带的 SAMPLE 数据库。要安装 SAMPLE 数据库,可从 db2 命令提示符下运行命令 db2sampl。下面是一些示例使用场景:

清单 2. 示例使用场景
1. db2 "call create_inserts('ORG','OrgInserts.sql','DEPTNUMB,LOCATION',
'where  MANAGER = 30',?)"

2. db2 "call create_inserts('ORG','OrgEntry.sql',null,'where DEPTNAME = ''Plains''',?)"

3. db2 "call create_inserts('ORG','OrgPrepop.sql',null,null,?)"
清单 3. 成功运行时的示例程序响应
  Value of output parameters
  --------------------------
  Parameter Name  : P_MESSAGE
  Parameter Value : Processing Done

  Return Status = 0
清单 4. 文件中生成的输出信息(如上面 3 条命令中所指定的)
1. -----Created using Insert Generator
INSERT INTO ORG ( DEPTNAME ,MANAGER ,DIVISION)  VALUES( 'South Atlantic' , 30 ,
'Eastern');

2. -----Created using Insert Generator
INSERT INTO ORG ( DEPTNUMB ,DEPTNAME ,MANAGER ,DIVISION ,LOCATION)  VALUES( 
51 , 'Plains' , 140 , 'Midwest' , 'Dallas');

3. -----Created using Insert Generator
INSERT INTO ORG ( DEPTNUMB ,DEPTNAME ,MANAGER ,DIVISION ,LOCATION)  VALUES( 
10 , 'Head Office' , 160 , 'Corporate' , 'New York');
INSERT INTO ORG ( DEPTNUMB ,DEPTNAME ,MANAGER ,DIVISION ,LOCATION)  VALUES( 
15 , 'New England' , 50 , 'Eastern' , 'Boston');
INSERT INTO ORG ( DEPTNUMB ,DEPTNAME ,MANAGER ,DIVISION ,LOCATION)  VALUES( 
20 , 'Mid Atlantic' , 10 , 'Eastern' , 'Washington');
INSERT INTO ORG ( DEPTNUMB ,DEPTNAME ,MANAGER ,DIVISION ,LOCATION)  VALUES( 
38 , 'South Atlantic' , 30 , 'Eastern' , 'Atlanta');
INSERT INTO ORG ( DEPTNUMB ,DEPTNAME ,MANAGER ,DIVISION ,LOCATION)  VALUES( 
42 , 'Great Lakes' , 100 , 'Midwest' , 'Chicago');
INSERT INTO ORG ( DEPTNUMB ,DEPTNAME ,MANAGER ,DIVISION ,LOCATION)  VALUES( 
51 , 'Plains' , 140 , 'Midwest' , 'Dallas');
INSERT INTO ORG ( DEPTNUMB ,DEPTNAME ,MANAGER ,DIVISION ,LOCATION)  VALUES( 
66 , 'Pacific' , 270 , 'Western' , 'San Francisco');
INSERT INTO ORG ( DEPTNUMB ,DEPTNAME ,MANAGER ,DIVISION ,LOCATION)  VALUES( 
84 , 'Mountain' , 290 , 'Western' , 'Denver');

错误条件

  1. 如果列包含 LOB 数据类型变体,系统会报告下列错误信息:"The program failed. Check if table contains incompatible datatype."
  2. 如果所有的列都被排除,系统会报告下列错误信息:"The program failed. There were no columns to be selected from the specified table."

源代码

可从下面的 下载 部分获得源代码,并可根据需要进行修改。

结束语

该实用工具为数据库开发人员提供一种用于创建预填充脚本和插入脚本的方便工具。该实用工具可与 db2look 结合使用,以在 SQL 中生成完整的模式信息。通过使用 EXPORT 实用工具来将 LOB 复制到文件系统,可消除 LOB 的局限性。


下载

描述名字大小
Windows version of scriptcreate_inserts.zip2KB
UNIX version of scriptcreate_inserts.tar10KB

参考资料

学习

获得产品和技术

  • 下载免费试用版的 DB2 9
  • 现在您可以免费使用 DB2。请下载 DB2 Express-C,它是供社区使用的免费版本的 DB2 Express Edition,并提供与 DB2 Express Edtion 相同的核心数据特性,为构建和部署应用程序提供坚实的基础。
  • IBM 试用软件:利用 IBM 试用软件构建您的下一个开发项目,可直接从 developerWorks 下载这些软件。

讨论

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Information Management
ArticleID=161210
ArticleTitle=DB2 预填充脚本生成器
publish-date=09202006