【问题标题】:Using IMPORT instead of LOAD in DB2在 DB2 中使用 IMPORT 而不是 LOAD
【发布时间】:2013-03-04 11:11:12
【问题描述】:

我想准备一个加载实用程序来将数据加载到 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 列以获得旧值?

感谢您的帮助。

谢谢, 马修·李菊

【问题讨论】:

    标签: import load db2


    【解决方案1】:

    你问的是不可能的。使用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,请确保更改列以确保将来生成的值不会与您刚刚插入表中的行发生冲突。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        @Ian Bjorhovde 为您提供了选项。

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-10-30
          • 1970-01-01
          • 1970-01-01
          • 2019-08-31
          • 2021-03-25
          相关资源
          最近更新 更多