如果数据尚未存在,则使用trigger插入表中

时间:2011-04-08 05:40:07

标签: triggers oracle10g


我有两个具有相同结构的表。表1有多行,它们可以具有相同的值。现在我想在表2中插入相同的行,不包括重复的行。我能够通常使用'减'来执行此操作,但我想编写一个触发器,以便如果将新行插入表1并且不存在于表2中,则插入表2中,否则不插入。我是触发器的新手。当我在表1中插入时,我写的触发器给出了“触发器正在变异”的错误。

  

INSERT INTO t3(name1,name2,num1,num2)选择name1,name2,num1,num2从t1 group by name1,name2,num1,num2减去select * from t3

当我写上面的代码时,它工作正常,但当我将其包含在我的触发器中时,它会给出错误。如何在触发器的帮助下执行上述操作?

请帮忙,

感谢
Pranay

1 个答案:

答案 0 :(得分:1)

您无需从行级触发器重新查询该表。这就是:NEW.语法的用途,例如:

INSERT INTO t3(name1,name2,num1,num2)
select :NEW.name1,:NEW.name2,:NEW.num1,:NEW.num2 from DUAL
minus select name1,name2,num1,num2 from t3;

虽然我认为上面的代码看起来有点傻。我更喜欢在t3上添加一个唯一约束,然后在触发器中添加一个处理程序来处理任何DUP_VAL_ON_INDEX例外。