触发变异错误

时间:2017-09-11 13:04:33

标签: sql oracle triggers mutating-table

我在schema1中有emp表,在schema2中有emp_fianl。

emp  
empid  ename  estatus
1      abc    incomplete
2      xyz    complete
3      ifg    incomplete
4      mno    incomplete

Emp_final
empid  ename  estatus
2      xyz    complete

当schema1 \ temp表中的estatus更改为完成时,我必须创建一个触发器以在Schema2 emp_final表中插入数据。 我在下面写了相同的触发器:

Create or replace trigger tri_emp_final  
After update on emp  
BEGIN  
IF :new.estatus='complete' then
Insert into emp_final  
(select :old.empid,:old.ename,:new.estatus from schem1.emp);  
END IF;  
END;  
/

我收到上述代码的变异错误消息。当我尝试更新emp表中的状态时。我是一名java开发人员,在Oracle,SQL方面经验不足。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:0)

使用

Create or replace trigger tri_emp_final  
After update on emp  for each row
BEGIN  
  IF :new.estatus='complete' then
    Insert into emp_final ( empid , ename , estatus)
    Values
    (:old.empid,:old.ename,:new.estatus );  
  END IF;  
END;  
/

您可以找到有效的演示here

答案 1 :(得分:0)

第一件事:我们要使用:old和:new,你的触发器必须是每个行。所以你需要改变:before update on emp for each row. 第二:像GoranStefanović写的那样,你不要选择插入,只需使用:旧值。