如何创建一个触发器,插入后在同一个表中更新一行?

时间:2016-08-08 13:37:27

标签: sql oracle plsql triggers

例如,我有一个表t_1,我只插入id值,但触发后应插入,更新值id_2并将id_2设置为id:< / p>

create table t_1(
id number(10),
id_1 number(10)
);

我创建了触发器:

create or replace trigger id_to_id_2
after insert
on t_1
for each row
begin
update t_1 set id_2=:new.id where id = new.id;
end;

/

但是当我尝试插入时,我收到错误:

    DB constraint error: ORA-04091: table t_1is mutating, trigger/function may 
not see it\nORA-06512: at 

我不明白这个错误,你能解释一下我做错了什么吗?

2 个答案:

答案 0 :(得分:3)

您需要之前插入触发器,如下所示:

create or replace trigger id_to_id_2
before insert
on t_1
for each row
begin
  :new.id_2 := :new.id;
end;

答案 1 :(得分:1)

此处也提出了类似的问题:Table is mutating, trigger/function may not see it (stopping an average grade from dropping below 2.5) 在这里:https://dba.stackexchange.com/questions/5432/what-are-the-causes-and-solutions-for-mutating-table-errors

触发器可能不是你想要达到目标的正确方法。至少,正如第二个链接所说,在所有可能的情况下,您的指示结果都是不可预测的。如果上面提到的链接对您没有帮助,我建议您提供有关您的意图的更多信息。