使用交叉加载器功能加载数据

LOAD实用程序可以直接将动态SQL SELECT语句的输出加载到表中。 动态SQL语句可在本地服务器或任何符合DRDA标准的远程服务器上执行。 该功能被称为 Db2 家庭交叉装载功能。

更改开始

准备工作

请确保您已满足使用光标加载数据下所列的要求更改结束

关于本任务

此功能允许您使用单个LOAD作业将数据从一个位置传输到另一个位置,或从同一位置的某个表传输到另一个表。 您对交叉加载器功能的输入可以来自除 Db2 for z/OS®;您可以使用 IBM® 信息集成器联合会功能,从 Oracle 和 Sybase 等不同来源获取数据,以及整个 Db2 数据库服务器。

注意: 如果使用行或列访问控制安全性的表是交叉加载器功能的数据源或加载目标,则数据将受相应行权限或列掩码中定义的规则约束。 SYSIBM.SYSTABLES 中的“控制”列指示是否为表格激活了行或列访问控制。

过程

使用交叉加载器功能加载数据:

  1. 使用EXEC SQL实用程序声明游标。 在游标定义中,指定一个SELECT语句,该语句用于标识要作为LOAD作业输入数据的输出表。
    编写SELECT语句时,请遵循以下规则:
    • SELECT语句中的列名必须与正在加载的表中的列名完全相同。 您可以在SELECT列表中使用AS子句来更改SELECT语句返回的列名,使其与目标表中的列名匹配。
    • SELECT列表中的列不需要与目标表中的列顺序相同。
    • SELECT语句需要通过三部分名称来引用任何远程表。
    • 虽然您无需在输入数据或目标表中为任何不同类型指定转换函数,但您可能需要在 SQL 中的任何附加 WHERE 子句中添加转换函数。
  2. 在LOAD语句中使用INCURSOR选项指定游标名称。

    您可以使用同一光标加载多个表格。

结果

当您提交LOAD作业时, Db2 解析游标定义中的SELECT语句并检查错误。 如果语句无效,LOAD实用程序会发出错误消息并指出导致执行失败的条件。 如果语句语法正确,但在执行时出错,LOAD实用程序也会发出错误消息。 当遇到错误时,实用程序将终止。 如果在游标的from子句中指定数据更改表引用,即使加载失败,源的更改也会提交。

如果没有错误发生,该实用工具将根据以下规则将光标所指向的结果表加载到指定的目标表中:

  • LOAD按名称而非顺序将输入数据中的列与目标表中的列进行匹配。
  • 如果光标中的列数少于正在加载的表格中的列数, Db2 用默认值填充缺失的列。 如果缺失列被定义为无默认值的非空值,则加载作业将失败。
  • 如果源列定义为可空,而相应的目标列定义为无默认值且不可空,则加载作业将失败。
  • 如果您指定了IGNOREFIELDS YES,LOAD将跳过输入数据中目标表中不存在的任何列。
  • 如果目标表中的数据类型与游标中的数据类型不匹配,则 Db2 会尽可能转换数据。 如果转换失败,LOAD作业也会失败。 您可以在游标声明的 SELECT 语句中使用 SQL 转换函数来避免这些转换错误。
  • 如果输入数据的编码方案与目标表的编码方案不同,则 Db2 自动转换编码方案。 请确保目标表中的长度定义能够容纳转换后的数据。
  • 如果目标表有GENERATED ALWAYS列,而您尝试向其中加载数据,则LOAD作业会失败。 为了避免这种情况,要么在游标的 SELECT 语句中不指定这些列,要么在 LOAD 语句中指定要覆盖这些列。

此外,虽然您无需在输入数据或目标表中为任何不同类型指定转换函数,但您可能需要在 SQL 中的任何附加 WHERE 子句中添加转换函数。