【问题标题】:Db2: Create a Column that stores the timestamp a value in the same row is setDb2:创建一个存储时间戳的列,在同一行中设置一个值
【发布时间】:2021-10-08 17:59:30
【问题描述】:

我的数据库中有一个名为 IS_SUBMITTED 的布尔列,默认设置为 False。

我想做的是在数据库中有另一个名为 TIME_SUBMITTED 的列默认设置为 Null,但是当 IS_SUBMITTED 设置为 True 时,TIME_SUBMITTED 会使用当前时间戳进行更新。

这可以实现吗?我认为它可能涉及到触发器的使用,但我对 Db2 很陌生,我似乎无法让它正常工作。

干杯

【问题讨论】:

    标签: triggers timestamp db2 generated-columns


    【解决方案1】:

    您需要一个 BEFORE UPDATE 触发器...

    简单的解决方案假定 IS_SUBMITTED 只从 FALSE 更改为 TRUE 一次。

    create or replace trigger MYTRIGGER
      before update of IS_SUBMITTED on MYTABLE
      referencing 
        new row as n
      set n.time_submited = current_timestamp
    ;
    

    如果 IS_SUBMITTED 可以更改为 false,您需要决定如何处理。并在触发器中使用复合 BEGIN/END 语句和附加逻辑。我会把它留作练习。

    最后请注意,在询问有关 SO 的 Db2 问题时,最好包括您的平台(LUW、z\OS、IBM i)和版本。

    【讨论】:

    • 感谢@Charles 的回复,我知道这应该如何工作。我知道调试语法不是 SO 的重点,但是当我尝试运行该命令时出现以下错误:“在“BEGIN-OF-STATEMENT”之后发现了一个意外的令牌“CREATE TRIGGER TIME_SUBMITTED_TRIGGER BEF”。预期的标记可能包括:“”.. SQLCODE=-104, SQLSTATE=42601, DRIVER=4.27.25'
    • 知道这里的语法可能有什么问题吗?我正在尝试在 DB2 Cloud UI 中执行它
    猜你喜欢
    • 1970-01-01
    • 2014-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-06
    • 2022-12-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多