使用德比中的条件创建触发器

时间:2017-09-15 15:11:12

标签: java sql sql-server database derby

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

我的问题是我必须在更新触发器中检查一个条件,并根据这个条件的结果我会做UPDATE或INSERT,所以在T-SQL中我会使用IF-ELSE条件。有人可以告诉我Derby中的等价物或其他方式吗?我已经考虑了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
            );

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

致以最诚挚的问候,

亚尔钦

1 个答案:

答案 0 :(得分:1)

不要随意标记。你的问题与sql server无关。

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