1

我想准备一个加载实用程序来将数据加载到 DB2 表中。该表具有包含 GENERATEDALWAYS 功能集的列。

因此,我无法从表中加载未加载的详细信息。

是否可以对设置了 GENERATEDALWAYS 列的表使用导入?

我做的步骤:

1. db2 "export to tbl.txt of del modified by coldel| select * from <schema.table> where col=value"
2. db2 "delete from <schema.table> where col=value"
3. db2 "import from tbl.txt of del modified by coldel| allow write access warningcount1 insert into <schema.table>"

具有“GENERATEDALWAYS”的列在导入后具有新值。是否可以使用导入来填充 GENERATEDALWAYS 列以获得旧值?

感谢您的帮助。

谢谢, 马修 Liju

4

3 回答 3

0

也许您可以从列中删除“生成”并在再次使用适当的值导入后添加它。

于 2013-03-05T14:57:51.123 回答
0

你问的是不可能的。IMPORT您不能覆盖具有GENERATED ALWAYS. 正如@Peter Miehle 建议的那样,您可以更改表格以指定该列是GENERATED BY DEFAULT,但这可能会破坏其他应用程序。

您的问题标题暗示您不想使用该LOAD实用程序(但您在实际问题中没有提及任何有关它的内容)。但是,LOAD将数据写入表并维护文件中存在的生成列的值的唯一方法是:

db2 "load from tbl.txt of del modified by generatedoverride insert into schema.table"

如果您这样做,请注意:

  • DB2 不检查是否与表中的现有行发生冲突。您需要在相关列上定义唯一索引来解决此问题;这将导致 DB2 删除您刚刚在加载DELETE阶段加载的行。

  • 如果您生成的列正在使用IDENTITY,请确保更改该列以确保将来生成的值不会与您刚刚插入表中的行发生冲突。

于 2013-03-05T18:49:08.800 回答
0

@Ian Bjorhovde 为您提供了选择。

IMPORT 实际上在后台执行 INSERT - 即,它首先准备一个带有参数标记的 INSERT 语句,并将输入文件中的值用于这些标记。

在您的 SQL 快照中,您将看到使用的 INSERT 语句。

在 INSERT 语句中不可能的任何事情都不能使用 IMPORT (有点 .. )

于 2013-03-05T18:58:35.190 回答