1

我有一个数据库表的转储,我必须在新数据库上传输具有相同结构的表上的行。在新表上已经有一些行,所以我只有在主键不存在时才插入新值。作为数据库,我使用的是 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”已经在数据库中,我该如何避免在执行查询时出错?

谢谢

4

1 回答 1

2

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

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_TEMP 可能会有所帮助。然后只运行一个合并语句:

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

于 2013-07-03T15:35:47.693 回答