【发布时间】:2014-12-26 14:25:40
【问题描述】:
我正在使用带有 TOAD 的 oracle 10g。 我需要使用 INSERT FROM SELECT 插入 lacs 记录。
BEGIN
INSERT INTO MYTABLE(C1,C2,C3)
SELECT C1,C2,C3 FROM MYTABLE2 WHERE C1>100;
EXCEPTION
WHEN DUP_VAL_ON_INDEX THEN NULL;
COMMIT;
END;
这里,我面临的问题是,如果这个选择查询返回的行已经存在于 MYTABLE 中,那么所有事务都将被回滚。
有没有办法插入所有不存在的行,忽略重复的行并继续插入不存在的行,然后提交事务?
【问题讨论】:
-
只需选择不同的 c1,c2,c3 ... where not exists (select 1 from mytable mt where mt.c1 = mytable.c1 and mt.c2 = mytable.c2 and mt.c3 = mytable.c3)
-
嗨,迈克,选择查询从多个表中获取列。三列来自三个不同的表。
-
你在编辑方面打败了我。您可能也可以进行合并,但正如您所见,有很多方法可以做到这一点。不匹配时使用 mytable2 m2 在 (m1.c1 = m2.c1 and m1.c2 = m2.c2 and m1.c3 = m2.c3) 上合并到 mytable m1,然后插入值 (m2.c1, m2.c2, m2. c3);