2017-09-15 59 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不支持多語句觸發器。看起來你需要使用多個觸發器。