2017-09-15 13 views
0

Apache Derby用のSQL更新トリガーステートメントを作成する必要があります。私は通常SQL ServerとT-SQLで作業しています。しかし今はダービーを使わなければなりません。残念なことに、私はDerbyの新機能であり、Derbyのマニュアルでは適切な解決策を見つけることができませんでした。CREATE TRIGGERダービーの条件付き

私の問題は、更新トリガの条件をチェックし、この条件の結果に基づいて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 
      ); 

この声明はあなたに私の問題を示すためだけのミニ例です。私はあなたが私を助けることを願っています:)。

敬具、

Yalcin

答えて

1

は無差別にタグを付けないでください。あなたの質問は、SQL Serverとは何の関係もありません。

しかし、あなたの目標は直接的に達成可能ではないようです - 議論されたように(あなたは検索しましたか?)here。 Derbyは複数ステートメント・トリガーをサポートしていません。複数のトリガーを使用する必要があるようです。