遞歸觸發器調用我有一個更新語句,嵌套在一個更新觸發器:如何防止在DB2
CREATE TRIGGER "BAD_RECURSIVE_TRIGGER"
AFTER UPDATE ON "MYTABLE"
REFERENCING NEW AS NEW_ROW
FOR EACH ROW
WHEN (NEW_ROW.ORDER IS NOT NULL)
BEGIN ATOMIC
IF <SOMECONDITION> THEN
UPDATE "MYTABLE" SET ORDER=ORDER+1 // This "update" fires the recursion.
WHERE <OTHERCONDITION>
END IF;
END;
我想,以防止觸發的遞歸執行,這是DB2(V9.7) ,我已經看到了SQL-Server和類似的問題Oracle數據庫:
Prevent recursive trigger in PostgreSQL
How do I prevent a database trigger from recursing?
但我不能找到一種方法來preve通過DB2進行管理。有沒有辦法阻止通過DB2的遞歸觸發器調用?
它是否必須是「後更新」?如果觸發器在實際更新之前發生並在此時修改了「ORDER」,會發生什麼情況?我假設你只想更新'當前'行,但是該語句將更新_entire_表...或者,只有在'ORDER' _ hasn't_從當前值改變時才更新(如果新值與舊的表內值相同)。 –
@ Clockwork-Muse,期望的行爲是: 如果「此記錄得到更新」,那麼「更新其他記錄」(來自同一張表)。問題在於,在第一個「更新觸發器」中,它會執行另一次更新,再次觸發觸發器。 而且似乎沒有辦法知道是否是第一個電話,這將解決我的問題。 我已經發布了另一個問題:http://stackoverflow.com/questions/13845776/db2-equivalent-of-sql-servers-trigger-nestlevel,但我仍然願意接受任何其他好的替代方案它。 –
... _你爲什麼要更新表格中的其他記錄?你試圖解決的實際問題是什麼?這個陳述將會是一個巨大的瓶頸,因爲你最終將對該表進行串行訪問。 –