0

我有一个 IBM DB2 表,我想从中卸载数据,以便将其加载到另一个 DB2 表中。

两个表都有相同的列(和类型),除了一个十进制字段。

在源表中为 DECIMAL(6),在目标表中为 DECIMAL(5)。

源表中有许多条目在 DECIMAL 字段中最多仅使用 5 位数字,并且只有一些条目使用了全部 6 位。

我要做的只是复制源表中最多 5 位的条目并删除所有其他条目。

我可以仅使用 UNLOAD 语句执行此操作吗?因此,有一个选项告诉系统“将列 'id' 卸载为 DECIMAL(5)(尽管它在表本身中是 DECIMAL(6)),并且如果该列的条目使用所有 6 个数字 (>99999),则不卸载那一排”。

另外,如果情况相反,您将如何处理?例如,从源中卸载 DECIMAL(5) 并在目标中加载为 DECIMAL(6)

我为什么要这样做?因为目标表是旧版本应用程序使用的表的旧版本。我们将在 6 个月内停止支持,但在那之前我们需要刷新其中的数据集。

使用 UNLOAD 和 LOAD 我正在谈论例如 https://www.ibm.com/support/knowledgecenter/SSEPEK_11.0.0/ugref/src/tpc/db2z_utl_unload.html下描述的 z/OS (?) 的 UNLOAD 和 LOAD 实用程序

4

1 回答 1

0

在不知道您的源环境的情况下,对于 Db2 Linux、Unix、Windows,export 语句与 select 语句一起使用。因此,您将执行任何有意义的逻辑将 DECIMAL(6) 转换为 DECIMAL(5) - 包括跳过需要所有 6 位数字的行,因为无法使它们适合 5 位数字分配。此环境中实际首选的方法现在是使用外部表,但它们以类似的方式工作。

export to 'myfile.csv' OF del select col1, dec_col6 from thetable where dec_col6 < 100000

或者

create external table 'myfile.csv' using (DELIMITER ',') as select col1, case when dec_col6 > 99999 then 99999 else dec_col6 end from thetable

外部表
导出

由于您使用了“卸载”这个词,我想您要么使用诸如高性能卸载之类的工具,要么使用不同风格的 Db2。

于 2020-01-16T08:37:53.727 回答