我想創建DB2 10.1.2當字段更新爲一定值時,在該表中的行數與該值,看看是否計數(在Linux上運行LUW)觸發它與另一個表中的計數相匹配,然後更新該表(例如,將任務狀態彙總爲工作狀態)。表達它似乎很簡單:DB2觸發行鎖定
CREATE TRIGGER AUTHORED
AFTER UPDATE OF TASK_STATUS ON TASK_TABLE
REFERENCING NEW AS N FOR EACH ROW WHEN (TASK_STATUS = 'Completed')
update JOB_TABLE set JOB_STATUS='Completed'
where JOB_TABLE.ID = N.JOB_ID
and JOB_TABLE.TOTAL_TASKS = (select count(*) from TASK_TABLE
where TASK_TABLE.JOB_ID = N.JOB_ID
and TASK_TABLE.TASK_STATUS = 'Completed')
不幸的是,它似乎是觸發的情況下,觸發的身體是不是在同一個工作單位,當你指望從觸發鎖定了這一行發生死鎖更新自己。下面是「的db2pd -wlocks」輸出我做一個觸發更新後:
Locks being waited on :
AppHandl [nod-index] TranHdl Lockname Type Mode Conv Sts CoorEDU AppName AuthID AppID
44248 [000-44248] 111 0200040E070000000000000052 RowLock ..X G 1385 perl KJPIRES 10.0.15.139.38727.140201011731
14937 [000-14937] 15 0200040E070000000000000052 RowLock .NS W 1238 perl KJPIRES 10.0.15.139.55287.140211231609
我試圖用「與UR」的內部計數,但是當我創建觸發器(「SQL20159W將被明確地忽略由於語句上下文,隔離子句被忽略。SQLSTATE = 01652「)。
我也嘗試過使用BEFORE和INSTEAD OF,但遇到了問題。
這看起來好像是一件常見的事情。它通常如何處理?
你有沒有嘗試'爲每個陳述'? – AngocA
我剛剛嘗試過「對於每條語句」,它仍然僵持不下。 (我不確定如果更新更新多行並且我爲「每個語句」而不是「針對每一行」執行操作,但它無法正常工作會發生什麼情況。) – kjpires
觸發器無法在就像你說的那樣,一個單獨的UOW,因爲觸發體實際上被編譯到引起觸發器運行的'UPDATE'語句的計劃中。你如何確定存在僵局? – mustaccio