插入时重定向重复行以进行更新

时间:2014-12-30 05:56:44

标签: oracle plsql

我在表格上有一个插入语句" test"。表格中第x列的PK" test"。 现在,当插入重复行时,同一行应该更新而不是插入。 我怎样才能做到这一点。 可以dup_val_on_index吗?

请帮忙。

1 个答案:

答案 0 :(得分:0)

首先创建上表中没有任何KEY列的副本,然后按

步骤1:每当遇到一堆insert语句时,truncate表首先出现

第2步:INSERT上面的截断表

第3步:执行MERGE语句,如下所示

MERGE INTO TABLE_MAIN M
   USING TABLE_MAIN_COPY C
   ON (m.id = c.id)
   WHEN MATCHED THEN UPDATE SET M.somecol = c.somecol
   WHEN NOT MATCHED THEN INSERT (m.id, m.somecol)
     VALUES (c.id, c.somecol);

如果在更新时有两行或更多行,则在合并ORA-30926: unable to get a stable set of rows in the source tables时可能会出错。

您可以使用与ID相关的GROUP函数或类似ORA-30926: unable to get a stable set of rows in the source tables

来避免这种情况