如何在新表中插入受影响的行

时间:2017-02-22 07:03:56

标签: oracle plsql triggers

以下是我正在执行某些更新的虚拟表。在这里,我只是操纵“NAME”列。我需要的是插入受影响的行,(比如)我为“ID”-2更改了第二个,然后我需要只有这一行应插入到具有新/更新值的新表中。我已尝试通过触发器执行此操作,但它会呕吐有关表变异的错误。

   ID    NAME
================ 
    1    Vaz
    2    Dan
    3    Steve

我想要插入数据的表与上面提到的表具有相同的结构,并且具有相同数据类型的相同列。

请建议是否可以通过其他任何方式完成此操作,或者我为错误代码编写错误代码。这是我为此目的编写的代码:

CREATE OR REPLACE TRIGGER HR.ins_temp
after UPDATE OF name ON HR.TEMP2 FOR EACH ROW
BEGIN
INSERT INTO temp3
(SELECT NAME
FROM temp2
WHERE (:new.NAME<>:old.NAME));
END;

temp2是操作表,temp3是新的。

1 个答案:

答案 0 :(得分:3)

无需选择。您可能还想将ID值放入表temp3

CREATE OR REPLACE TRIGGER HR.ins_temp
after UPDATE OF name ON HR.TEMP2 FOR EACH ROW
BEGIN
    INSERT INTO temp3 (id, name)
    values (:new.id, :new.name);
END;
/

由于触发器定义为update of name,您实际上不需要检查名称是否已更改,但如果您愿意,可以执行以下操作:

CREATE OR REPLACE TRIGGER HR.ins_temp
after UPDATE OF name ON HR.TEMP2 FOR EACH ROW
BEGIN
  if (   (:new.name <> :old.name)
      OR (:new.name is null and :old.name is not null)
      OR (:new.name is not null and :old.name is null)) 
 then
    INSERT INTO temp3 (id, name)
    values (:new.id, :new.name);
  end if;
END;
/