【问题标题】:use trigger to insert into table if data is not already present如果数据不存在,则使用触发器插入表中
【发布时间】:2011-04-08 05:40:06
【问题描述】:


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

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

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

请帮忙,

谢谢
普拉奈

【问题讨论】:

    标签: triggers oracle10g


    【解决方案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 异常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-16
      • 1970-01-01
      • 2021-07-12
      • 2017-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多