发生错误时继续从select语句插入

时间:2019-03-18 07:16:55

标签: sql oracle error-handling insert

有人在发生错误时可以帮助我继续INSERT INTO ... SELECT FROM语句吗?预先感谢。

示例SQL脚本是

insert into tab1
select id, name from tab2

2 个答案:

答案 0 :(得分:0)

如果目标表上具有唯一键,而源表上没有,则可能由于重复的值而在插入时发生错误

使用提示ignore_row_on_dupkey_index,您可以忽略错误。

以下是一个示例,如果您的表在ID上具有Uniq键。 unique_index_name是目标表上的uniqueindex的名称

insert /*+ ignore_row_on_dupkey_index(tab1, unique_index_name) */
  into tab1
( select * from tab2);

作为替代方案,您可以查看合并语句 看起来像这样会忽略错误

merge into tab2 a
 using tab1 b
    on (a.id = b.id)
  when not matched then
    insert (id,n)
    values (b.id, b.n)
log errors into ERR$_tab2 REJECT LIMIT UNLIMITED;

;

所有错误将记录到您之前必须生成的错误表中。 你可以做到喜欢

call DBMS_ERRLOG.CREATE_ERROR_LOG (dml_table_name  => 'tab2);  

ERR$_tab2将是错误表

答案 1 :(得分:-1)

请尝试这个。

INSERT INTO tab1 (id,name) SELECT id, name from tab2