2017-09-15 60 views
0

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

这种说法只是一个小例子来向你展示我的问题。我希望你可以帮助我 :)。

最好的问候,

亚尔钦

回答

1

不要胡乱标注。你的问题与sql server无关。

但是看起来你的目标并不是可以直接实现的 - 正如讨论过的那样(你是否搜索过?)here。 Derby不支持多语句触发器。看起来你需要使用多个触发器。