2016-05-27 8 views
0

owner_idがnullの場合、owner_notif_staへの更新または挿入後にowner_notif_staをnullに設定するトリガーを起動しようとしています。 owner_idとowner_notif_staは同じテーブルからのものです。Derby ERROR 54038:ネストされたトリガーの最大深度を超えました

トリガー:

CREATE TRIGGER check_owner 
AFTER UPDATE OF owner_notif_sta ON risk 
REFERENCING OLD AS EXISTING 
FOR EACH ROW MODE DB2SQL 
    UPDATE risk SET owner_notif_sta = NULL 
    WHERE owner_id IS NULL; 

I火しようとした更新:

UPDATE RISK SET owner_notif_sta = 'helloo' WHERE risk_id = 'ICT123'; 

(iは更新を焼成したとき取り込まれていない)、私は、次の受信ヌルたOWNER_IDエラー: エラー54038:ネストされたトリガーの最大深度を超えました。すでにヌルとしてowner_notif_staを持つ行を除外するために、わずかにUPDATE声明の変更について事前

答えて

1

何で

ありがとう:

CREATE TRIGGER check_owner 
AFTER UPDATE OF owner_notif_sta ON risk 
REFERENCING OLD AS EXISTING 
FOR EACH ROW MODE DB2SQL 
    UPDATE risk 
     SET owner_notif_sta = NULL 
    WHERE owner_id IS NULL 
     AND owner_notif_sta IS NOT NULL; 
+0

はあなたに感謝。私はそれを試みましたが、DerbyがIf else文をサポートしていないと思います。 –

+0

私は私の答えを編集しました。私はそれがはるかに簡単だと思うし、それは動作するはずです。トリガー内の 'UPDATE'ステートメントの最後に' AND owner_notif_sta IS NOT NULL'を追加してください。再帰的なトリガー呼び出しを防止する必要があります。 – sstan

+1

これは行トリガーであるため、update文にキーまたはID列に 'where'句がないことに驚いています(例:' id = existing.id) '。私はアップデートが1行に限定されると期待していますが、私はそれを見ていません。それはあなたが見る必要のあるものかもしれません。 – sstan

関連する問題