Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在写入触发器时更改表_Sql_Oracle_Triggers - Fatal编程技术网

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;

你是对的!非常感谢你!!!我不敢相信我在错误的方向上浪费了这么多时间。。。。。。。