在编写触发器时改变表

时间:2013-02-23 06:58:51

标签: sql oracle triggers

我已经陷入了这个问题很长一段时间了......任何人都可以帮助我吗? 这是我想要实现的东西: 我有一个表A,A有属性:id,count,total。在这里,我需要实现这样的触发:如果表A中的计数更新,触发器将总计设置为1.

我的初始代码是这样的:

    CREATE OR REPLACE TRIGGER tri_A AFTER UPDATE OF count ON A
    FOR EACH ROW
    BEGIN
    UPDATE A SET total = 1 WHERE id = :new.id;
    END;
    /

这个问题就是变异表。更新表后,表将被锁定。我搜索了答案,我尝试了pragma autonomous_transaction,但是我得到了一个无效的触发器规范错误。还有其他评论说我们应该尝试使用触发器的组合来做到这一点....我无法弄清楚如何做到这一点

1 个答案:

答案 0 :(得分:1)

假设id是主键,您不希望UPDATE表。您只想设置:new.total。您还需要在BEFORE UPDATE触发器而不是AFTER UPDATE触发器中执行此操作。

CREATE OR REPLACE TRIGGER tri_A 
  BEFORE UPDATE OF count ON A
  FOR EACH ROW
BEGIN
  :new.total := 1;
END;