【问题标题】:Db2 change a column to row update timestampDb2 将列更改为行更新时间戳
【发布时间】:2012-10-09 13:34:09
【问题描述】:

在我的表中,我有一列 MODIFIED 类型为 TIMESTAMP。 我想在行更新时自动更新此列

我可以将它用于新列

alter table my_table add column last_updated timestamp not null
 generated by default for each row on update as row change timestamp 

但我不能使用它来编辑现有列以自动更新

alter table my_table alter column modified set data type timestamp 
 not null generated by default for each row on update as row change timestamp

我是否正确使用了alter?

错误信息是

Error: DB2 SQL Error: SQLCODE=-104, SQLSTATE=42601, SQLERRMC=alter table my_table alter column modified;BEGIN-OF-STATEMENT;<values>, DRIVER=3.50.152
SQLState:  42601
ErrorCode: -104

【问题讨论】:

  • 您是否收到错误消息?如果有,是什么?
  • 认为考虑到参考文档的布局方式,您可能只能添加列(即,row-change-timestamp 部分位于 @ 987654324@,而不是ALTER COLUMN)。添加新列、移动数据(如有必要)、然后删除旧列是否有任何问题?
  • @Clockwork-Muse 它只是添加列、移动数据、删除列、使用新配置再次添加列、移动数据并删除临时列并抛出几个重组的过程至少在 9.7 中我可以重命名列,但我使用的是 9.5
  • 创建一个新表,然后用新列将数据放入其中,然后交换表?

标签: sql db2 timestamp last-modified


【解决方案1】:

在这里找到一篇文章 http://ibmsystemsmag.blogs.com/db2utor/2008/01/automate-row-ch.html

基本上是这样说的

  • 您不能使用 ALTER TABLE 语句来转换 现有表使用 as-row-change-timestamp-clause。你必须 要么删除表并使用定义的列重新创建 as-row-change-timestamp-clause 或 ALTER 表并添加一个新的 带有 as-row-change-timestamp-clause 的列。

【讨论】:

    【解决方案2】:

    您将能够使用以下查询添加带有时间戳的新列。

    ALTER TABLE TABLE_NAME
      add column UPDATED_DATE_TIME TIMESTAMP GENERATED ALWAYS FOR EACH ROW
      ON UPDATE AS ROW CHANGE TIMESTAMP NOT NULL;
    

    【讨论】:

      【解决方案3】:

      一旦列存在,您可以使用稍微不同的语法来更改数据类型和属性:

      alter table my_table alter column my_column set generated by default ...
      

      【讨论】:

        猜你喜欢
        • 2021-08-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-26
        • 2020-01-30
        • 1970-01-01
        • 2015-12-05
        • 1970-01-01
        相关资源
        最近更新 更多