当前位置:首页>网络学院>数据库开发教程>DB2教程>文章内容

DB2中使用EXPORT程序

[ 来源:http://www.it55.com | 作者: | 时间:2007-12-07 | 收藏 | 推荐 ] 【

EXPORT 实用程序概述

  EXPORT 实用程序使用一条 SQL SELECT 语句或 XQUERY 语句将数据从数据库表提取到一个文件中。数据可以被导出到 DEL、IXF 或 WSF 文件中。建议在 export 中包括 MESSAGES 子句,以捕获导出过程中遇到的错误、警告和包含有用信息的消息。

  要想成功地调用 EXPORT 实用程序,必须拥有 SYSADM 或 DBADM 权限,或者拥有 EXPORT 命令中所访问的表或视图上的 CONTROL 或 SELECT 特权。

  对于 DB2 9.1 中新引入的基于标签的访问控制(LBAC)支持,需要注意 LBAC 凭证,它可能允许也可能不允许访问受保护的行和/或列。当从一个包含受保护行的表中导出数据时,LBAC 凭证可能限制被导出的行。如果您不具备对某个行的读访问权限,那么就不能导出这个行。这种情况下并不会给出任何错误或警告。然而,如果 LBAC 凭证不允许读取导出中包含的一个或多个受保护的列,那么导出将失败,并返回一个错误。

  我们来看看一个简单的导出的例子。下面的命令将 SELECT 语句的结果导出到一个 DEL 格式的文件中。消息文件 msg.out 用于记录有用的信息和遇到的错误或警告:

  EXPORT TO myfile.del OF DEL

  MESSAGES msg.out

  SELECT staff.name, staff.dept, org.location

  FROM org, staff

  WHERE org.deptnumb = staff.dept;

  文件类型修饰符

  在前面的例子中,数据被提取到一个 DEL 格式的文件中。默认情况下,列值之间以逗号(,)隔开,字符串以双引号(")括起来。如果被提取的数据已经包含逗号和双引号,那么会怎么样呢?在这种情况下,导入或装载实用程序不可能确定哪些符号是实际的数据,哪些符号是分界符。为了定制 EXPORT 如何操作,可以使用 MODIFIED BY 子句,并指定您想用文件类型修饰符更改哪些方面。下面是带 MODIFIED BY 子句的 EXPORT 命令:

  EXPORT TO file_name OF file_type

  MODIFIED BY file_type_modifiers

  MESSAGES message_file

  select_statement

  在 Command Reference Guide 中的 EXPORT 小节下,可以找到文件类型修饰符的完整列表。下面列出了一些常用的修饰符:

  chardelx

  指定 x 作为新的单字符字符串分界符。默认值是一个双引号(")。

  coldelx

  指定 x 作为新的单字符列分界符。默认值是一个逗号(,)。

  codepage=x

  指定 x (一个 ASCII 字符串)作为输出数据的新的码页(code page)。在导出操作期间,字符数据被从应用程序码页转换成这种码页。

  timestampformat="x"

  x 是源表中时间戳的格式。

  考虑这个例子:

  EXPORT TO myfile.del OF DEL

  MODIFIED BY chardel! coldel@ codepage=1208 timestampformat="yyyy.mm.dd hh:mm tt"

  MESSAGES msg.out

  SELECT * FROM schedule

  前面的命令按照以下方式将 SCHEDULE 表中的数据导出到 DEL 格式的文件中:

  •   字符串以感叹号(!)括起来。
  •   列之间以 @ 符号分隔开。
  •   将字符串转换成码页 1208。

  SCHEDULE 表中用户定义的时间戳的格式为 yyyy.mm.dd hh:mm tt。

  用 LOBSINFILE 修饰符导出大型对象

  当导出包含大型对象列的表时,默认情况下只能导出 LOB 数据的前 32 KB。对象的这一部分与其他列数据放在同一个文件中。为了完整地导出 LOB 数据,并将它们与其他列数据分别存储在不同的文件中,必须使用 LOB 选项。在 DB2 V9.1 中,可以指定是将多个 LOB 值连接起来并导出到同一个输出文件中,还是将每个 LOB 值导出到一个单独的文件中。

  下面是一个带 LOBSINFILE 修饰符的 EXPORT 命令,该修饰符将导致导出实用程序将多个 LOB 值写到同一个输出文件中。

  EXPORT TO file_name OF file_type

  LOBS TO lobfile_directory_1, lobfile_directory_2, ...

  LOBFILE lobfilename

  MODIFIED BY LOBSINFILE

  MESSAGES message_file

  select_statement

  LOBS TO 子句指定 LOB 文件将被存储到的目录。如果没有发现 LOBS TO 子句,那么 LOB 数据将被存储到当前的工作目录。注意,在前面的命令中,可以指定不止一个路径作为 LOB 文件目标目录。每个 LOB 路径至少有一个文件,每个文件至少包含一个 LOB。

  有时候需要使用用户指定的文件名来标识被提取出来的 LOB 文件。LOBFILE 子句可以用于这一目的。每个 LOB 文件将有一个序列号作为文件扩展名(例如 lobfile.001、lobfile.002、lobfile.003 等)。

  当指定 LOBS TO 或 LOBFILE 选项时,将隐式地激活 LOBSINFILE 行为。但是,最好显式地指定 LOBSINFILE 修饰符,以避免与 LOBSINSEPFILES 修饰符行为混淆,稍后会谈到后一种修饰符。

  LOB Location Specifier

  当使用 LOBSINFILE 修饰符导出大型对象时,会生成一个 LOB Location Specifier (LLS),后者将被存储在导出输出文件中。LLS 是一个字符串,用于表明在哪里可以找到 LOB 数据。LLS 的格式为 filename.ext.lob.nnn.mmm/。我们来更详细地看看这个格式:

  filename.ext.lob 是包含 LOB 数据的文件的文件名。ext 是一个序列号,如前所述。

  nnn 是大型对象在 LOB 文件中的偏移位置,以字节计。

  mmm 是大型对象的长度,以字节计。

  例如,resume.001.lob.1257.2415/ 表明大型对象位于 resume.001.lob 文件中,实际的 LOB 数据从文件的第 1257 个字节开始,其长度为 2,415 个字节。

  为了清楚地说明 LLS 的用法,可以看看下面的例子。

  EXPORT TO empresume.del DEL

  LOBS TO d:\lob1\

  LOBFILE resume

  MODIFIED BY LOBSINFILE

  MESSAGES msg.out

  SELECT * FROM emp_resume

(编辑:IT资讯之家 www.it55.com

返回顶部
共3页: 上一页 1 [2] [3] 下一页  

网友评论

[以下评论为网友观点,不代表本站。请自觉遵守互联网相关政策法规,所有连带责任均有评论者自负。]
[不超过250字]