【问题标题】:CREATE TRIGGER With Condition in DerbyCREATE TRIGGER with Condition in Derby
【发布时间】:2017-09-15 15:11:11
【问题描述】:

我必须为 Apache Derby 编写一个 sql 更新触发器语句。我通常使用 Sql Server 和 T-SQL。但现在我必须使用德比。不幸的是,我对 Derby 很陌生,在 Derby 手册中找不到合适的解决方案。

我的问题是我必须检查更新触发器中的条件,并根据该条件的结果执行 UPDATE 或 INSERT,因此在 T-SQL 中我将使用 IF-ELSE 条件.有人可以告诉我德比中的等价物或其他方式吗?我已经考虑过 WHEN 子句,但这似乎是错误的方向。

到目前为止,我有以下代码:

CREATE TRIGGER UPDATE_EVENTS
    AFTER UPDATE
    ON ACCIDENTS
    REFERENCING OLD AS oldRow NEW AS newRow
    FOR EACH ROW MODE DB2SQL

-- In the following, I would usually use an IF-ELSE Statement, 
-- but I can't use this in Derby. So I tried the optional WHEN Statement, 
-- but there I could not have an else "path", right?

-- This should be the If-Case
    WHEN((SELECT COUNT(*) FROM VIEW_EVENTS WHERE ID_DATE = newRow.ID_DATE) > 0)
        UPDATE VIEW_EVENTS
        SET    DETAILS = newRow.DETAILS,
               PARTICIPANTS = newRow.PARTICIPANTS
        WHERE  ID_DATE = newRow.ID_DATE

-- And this should be the else case
    WHEN((SELECT COUNT(*) FROM VIEW_EVENTS WHERE ID_DATE = newRow.ID_DATE) <= 0)
            INSERT INTO VIEW_EVENTS
            ( ID_KEY,
              ID_DATE,
              DETAILS,
              PARTICIPANTS
            )
            VALUES
            ( newRow.ID_KEY,
              newRow.ID_DATE,
              newRow.DETAILS,
              newRow.PARTICIPANTS
            );

此声明只是向您展示我的问题的一个小例子。我希望你能帮助我:)。

最好的问候,

亚尔辛

【问题讨论】:

    标签: java sql sql-server database derby


    【解决方案1】:

    不要乱加标签。你的问题与sql server无关。

    但您的目标似乎无法直接实现 - 正如已经讨论过的那样(您搜索了吗?)here。 Derby 不支持多语句触发器。看来您需要使用多个触发器。

    【讨论】:

      猜你喜欢
      • 2021-12-27
      • 1970-01-01
      • 2019-01-16
      • 2022-12-26
      • 1970-01-01
      • 1970-01-01
      • 2021-10-29
      • 2022-12-31
      • 1970-01-01
      相关资源
      最近更新 更多