我必须为 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/