java - 在 Derby 中创建有条件的触发器

标签 java sql sql-server database derby

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

我的问题是我必须检查更新触发器中的条件,并根据此条件的结果我将执行更新或插入,因此在 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
            );

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

最诚挚的问候,

亚尔辛

最佳答案

请勿随意标记。你的问题与sql server无关。

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

关于java - 在 Derby 中创建有条件的触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46242709/

相关文章:

java - 如何获取有效的 Alfresco 应用程序上下文来创建文件夹?

java - 需要类、接口(interface)或枚举

sql - postgresql语法错误?

java - 为实现 Comparable 的泛型类创建一个 compareTo

java - 我们可以编写自定义标记界面吗

mysql - (MySql) 选择查询在 WHERE 和 AND 条件下返回空行

sql - 如果双方都是左连接实体,where 子句中的条件顺序是否相关?

sql - 从具有 XML 数据类型的表中查询 XML 数据

sql-server - 在 VS 2013 中使用 SQL Server 数据库项目有哪些优势?

sql-server - 当 URI 未知时,XPath 是否有定义的方法从 namespace 的缩写检索 URI?