以下是我正在执行某些更新的虚拟表。在这里,我只是操纵“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是新的。
答案 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;
/