有人在发生错误时可以帮助我继续INSERT INTO ... SELECT FROM语句吗?预先感谢。
示例SQL脚本是
insert into tab1
select id, name from tab2
答案 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