2013-06-20 143 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触发器会产生什么区别(除了更新后会触发) –

相关问题