2013-06-20 191 views
0

我寫了一個AFTER UPDATE觸發器,用於更新表ABC的列abc_xyz。當有人試圖更新同一張表的列ans_mode時,觸發器應該觸發。 abc_xyz的默認值爲0。觸發器應將其更新爲1AFTER UPDATE觸發器

CREATE OR REPLACE TRIGGER switchtrigger 
    AFTER UPDATE OF ans_mode 
    ON ABC 
BEGIN 
    UPDATE ABC 
     SET abc_xyz = 1 
    WHERE abc_xyz= 0 AND ; 
END; 

我想寫一個AND條件,以便只更新那些特定的行。

回答

2

上面的觸發器是一個語句觸發器,而不是行觸發器。 IMO倒不如有這是一個BEFORE UPDATE行觸發器,這樣你可以改變的:新值所需的值:

CREATE OR REPLACE TRIGGER SWITCHTRIGGER 
    BEFORE UPDATE OF ANS_MODE ON ABC 
    FOR EACH ROW 
BEGIN 
    IF :OLD.ABC_XYZ = 0 THEN 
    :NEW.ABC_XYZ := 1; 
    END IF; 
END; 

分享和享受。

+0

謝謝賈維斯, 我試着寫行觸發器,但得到了突變表錯誤,因爲更新在同一個表中完成。 ABC_XYZ的默認值爲0.因此,查詢中提到的IF條件會更新所有行。 我只需要更新那些用戶/某人進行更改的行。 –

+1

在行觸發器中,您不能執行任何訪問聲明表的表的SQL語句 - 這就是「mutating table」錯誤的全部內容。 ON UPDATE行觸發器只會針對根據聲明的條件實際更改的行調用,因此此觸發器只會影響ABC.ANS_MODE已更改的那些行。我建議你寫一些代碼並測試一下。 –

+0

對不起,延遲迴復。 謝謝賈維斯。我測試過,它工作。 如果我使用After update觸發器會產生什麼區別(除了更新後會觸發) –

相關問題