我有一個表觸發器,它在狀態從2變爲3時調用一個過程。該過程檢查整個數據組(group_id)是否處於狀態3,然後執行一些操作。防止程序並行執行
但現在我面臨的問題是,當我同時設置狀態3的整個數據組時,該過程被多次調用並多次執行此操作。我怎樣才能防止他?例如用鎖
這裏是我的程序查詢:
SELECT COUNT(*)
INTO nResult
FROM ticket
WHERE group_id = nGroupId
AND statusid BETWEEN 0 AND 2;
/* If not all tickets of group in status 3, no action required */
IF nResult != 0 THEN
RETURN;
END IF;
這是我的觸發器:
IF (:NEW.STATUSID = 3 AND :OLD.STATUSID = 2) THEN
myprocedure(:NEW.group_id);
END IF;
根據你的解釋程序將被稱爲多次出現了許多變化,從2到3,因爲你已經創建了一個行級觸發器 - 這是預期的行爲。 –
是的,它是預期的行爲,但現在我需要一個預防措施,以避免執行並行並多次爲同一組執行此操作 – ZerOne