Sql 在写入触发器时更改表
这个问题困扰了我很长时间……有人能帮我吗?Sql 在写入触发器时更改表,sql,oracle,triggers,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;
以下是我想要实现的东西: 我有一个表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 autonomy_事务,但得到了一个无效的触发器规范错误。还有其他评论说,我们应该尝试使用触发器的组合来实现这一点……我不知道如何实现这一点,假设
id
是主键,您不想更新表。您只需要设置:new.total
。您还需要在更新前的触发器而不是更新后的触发器中执行此操作
CREATE OR REPLACE TRIGGER tri_A
BEFORE UPDATE OF count ON A
FOR EACH ROW
BEGIN
:new.total := 1;
END;
你是对的!非常感谢你!!!我不敢相信我在错误的方向上浪费了这么多时间。。。。。。。