【问题标题】:Create History Trigger Db2创建历史触发器 Db2
【发布时间】:2018-12-20 14:34:22
【问题描述】:

我正在尝试创建一个触发器,将新插入和/或更新的记录从一个表复制到该表的历史版本。目的是在每次插入和/或更新表中的记录时保留记录。

这是我拥有的 Create Trigger 语句语法,遵循 IBM Db2 Trigger 站点。

CREATE TRIGGER "TADB2"."HIST_CSEMASTER_Z_LOG"
AFTER UPDATE ON TADB2.CSEMASTER_Z
REFERENCING NEW AS N
FOR EACH ROW
BEGIN ATOMIC
INSERT INTO TADB2.HIST_CSEMASTER_Z
values (N.CSEMASTERID, N.CURRID, N.SUBCURRID, N.EXPIREDATE, N.CREATEDATE, N.CUSTVIEWNUM, N.CSEMSTRNAME, N.JOINCODE, N.CONTACTCOUNTRYCD, N.CONTACTSERIALNUM, N.AUDIENCECD, N.SPONSORNAME, N.AVAILABLEDATE, N.OWNERCOUNTRYCD, N.OWNERSERIALNUM, N.PRMWWCHAPTERID, N.PRMWWSUBCHAPTERID, N.SECWWCHAPTERID, N.SECWWSUBCHAPTERID, N.INTRANETIND, N.TINSERTTS, N.TLASTUPDTS, N.IBM_TRADEMARK, N.OTHER_TRADEMARK, N.INTERNETIND, N.BRANDID, N.BUSINESSID, N.LIFECYCLE_STATUS);
END;

我收到的错误是:

[代码:-104,SQL 状态:42601] 在“N.LIFECYCLE_STATUS)”之后发现了意外的标记“END-OF-STATEMENT”。预期的标记可能包括:“”.. SQLCODE=-104, SQLSTATE=42601, DRIVER=3.72.44

我试过了:

  • 删除 END
  • 删除 END 后的分号
  • 删除 N.LIFECYCLE_STATUS 后的分号);

任何帮助都会很棒!谢谢。

【问题讨论】:

标签: db2


【解决方案1】:

为此,我强烈推荐 Db2 临时表。如果您只使用System Temporal 功能,它已经提供了您描述的功能。

值得一看

【讨论】:

    【解决方案2】:

    你必须使用不同于';'工具中的语句终止符。 下面是 DB2 命令行处理器的示例,它将第一行理解为执行此操作的指令。

    --#SET TERMINATOR @
    CREATE TRIGGER "TADB2"."HIST_CSEMASTER_Z_LOG"
    AFTER UPDATE ON TADB2.CSEMASTER_Z
    REFERENCING NEW AS N
    FOR EACH ROW
    BEGIN ATOMIC
      INSERT INTO TADB2.HIST_CSEMASTER_Z
      values (N.CSEMASTERID, N.CURRID, N.SUBCURRID, N.EXPIREDATE, N.CREATEDATE, N.CUSTVIEWNUM, N.CSEMSTRNAME, N.JOINCODE, N.CONTACTCOUNTRYCD, N.CONTACTSERIALNUM, N.AUDIENCECD, N.SPONSORNAME, N.AVAILABLEDATE, N.OWNERCOUNTRYCD, N.OWNERSERIALNUM, N.PRMWWCHAPTERID, N.PRMWWSUBCHAPTERID, N.SECWWCHAPTERID, N.SECWWSUBCHAPTERID, N.INTRANETIND, N.TINSERTTS, N.TLASTUPDTS, N.IBM_TRADEMARK, N.OTHER_TRADEMARK, N.INTERNETIND, N.BRANDID, N.BUSINESSID, N.LIFECYCLE_STATUS);
    END@
    

    【讨论】:

    • 感谢@Mark Ba​​rinstein。我在上面尝试了您的解决方案,不幸的是我仍然收到相同的错误。此外,我现在收到以下错误:[代码:-104,SQL 状态:42601] 在“END@”之后发现了意外的令牌“END-OF-STATEMENT”。预期的标记可能包括:“JOIN ”.. SQLCODE=-104, SQLSTATE=42601, DRIVER=4.22.29
    • 您使用什么环境或编辑器提交此声明?
    • 再一次:您必须更改工具中使用的语句终止符。您基于 jbdc 的工具不理解我提到的指令。你必须在你的工具中找到一个可以做到这一点的地方。
    • @MarkBarinstein 啊,我明白你的意思了。我想知道我可以把它放在我的工具中的什么地方。或许大家都有见识?我使用的工具是 macOS 上的 DB Visualizer 10.0.15。有什么想法吗?
    猜你喜欢
    • 2012-10-28
    • 2010-10-19
    • 1970-01-01
    • 1970-01-01
    • 2011-01-15
    • 2021-08-01
    • 2016-05-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多