如何在新表中插入受影响的行
Posted
技术标签:
【中文标题】如何在新表中插入受影响的行【英文标题】:How to Insert affected rows in a new table 【发布时间】:2017-02-22 07:03:55 【问题描述】:以下是我正在执行一些更新的虚拟表。在这里,我只是在操作“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】:不需要选择。而且您可能还想将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;
/
【讨论】:
工作就像一个魅力,非常感谢。但是如果有很多列怎么办?我仍然会在插入时单独提及它们 @hashir:是的,你需要这样做,这就是 SQLinsert
语句的工作原理。以上是关于如何在新表中插入受影响的行的主要内容,如果未能解决你的问题,请参考以下文章