Oracle11g SQL ORACLE INSERT INTO-如何在

Oracle11g SQL ORACLE INSERT INTO-如何在,oracle11g,sql-insert,Oracle11g,Sql Insert,我有一个数据库表的转储,我必须在一个新的数据库上传输具有相同结构的表上的行。 在新表上已经有一些行,因此我必须仅在主键不存在时插入新值。 作为数据库,我使用的是Oracle 11.6 ... INSERT INTO TABLE1 (KEY, FIELD1, FIELD2) VALUES ('1111111','aaa','xxx'); INSERT INTO TABLE1 (KEY, FIELD1, FIELD2) VALUES ('2222222','bbb','yyy'); INSERT I

我有一个数据库表的转储,我必须在一个新的数据库上传输具有相同结构的表上的行。 在新表上已经有一些行,因此我必须仅在主键不存在时插入新值。 作为数据库,我使用的是Oracle 11.6

...
INSERT INTO TABLE1 (KEY, FIELD1, FIELD2) VALUES ('1111111','aaa','xxx');
INSERT INTO TABLE1 (KEY, FIELD1, FIELD2) VALUES ('2222222','bbb','yyy');
INSERT INTO TABLE1 (KEY, FIELD1, FIELD2) VALUES ('3333333','ccc','zzz');
...
如果键“2222222”已在数据库中,如何避免在执行查询时出错


谢谢您

您可以对每条记录执行以下操作:

MERGE INTO TABLE1 mt
USING (
   SELECT '2222222' as KEY,
          'bbb' as FIELD1,
          'yyy' as FIELD2
   FROM dual
) t on (mt.key = t.key)
WHEN NOT MATCHED THEN
   INSERT (KEY, FIELD1, FIELD2)
   VALUES (t.KEY, t.FIELD1, t.FIELD2);

但是,首先在临时表TABLE1\u TEMP中插入所有内容可能会有所帮助。 然后只运行一个merge语句:

MERGE INTO TABLE1 mt
USING (
   SELECT KEY,         -- more interesting
          FIELD1,      -- to merge all this
          FIELD2       -- at once instead of
   FROM TABLE1_TEMP    -- just one record
) t on (mt.key = t.key)
WHEN NOT MATCHED THEN
   INSERT (KEY, FIELD1, FIELD2)
   VALUES (t.KEY, t.FIELD1, t.FIELD2);

然后删除TABLE1_TEMP

解决方案的可能副本是可以的,但是如果记录已经在数据库中,我不想更新/覆盖它。我需要避免插入/更新数据库中已经存在的if。这正是上面的语句所做的。因为匹配时没有
子句,不匹配时只有