我有一些sql脚本,它们使用
INSERT INTO secondtable
(field, field1)
SELECT field, field2
FROM table;我使用oracle9.x和sqldevelopper。
当我启动它们时,在某些insert select时,我得到了外键错误。所以他们没有插入工作的集合。
当错误出现时,是否可以告诉oracle继续相同的操作,如果可能,还可以显示或记录错误?
发布于 2011-02-10 03:28:37
您不能在ORacle 9中继续执行失败的基于set的insert。您要么必须使语句failsafe,要么接受它将被回滚。
选项:
发布于 2011-02-10 03:24:12
不是在Oracle9i中。在10.2中,引入了DML error logging,这似乎正是您想要的。
在早期版本中,最常见的方法是使用PL/SQL,即
BEGIN
FOR src IN (SELECT field1, field2
FROM source_table)
LOOP
BEGIN
INSERT INTO destination_table( field1, field2 )
VALUES( src.field1, src.field2 );
EXCEPTION
WHEN dup_val_on_index
THEN
<<log the foreign key error>>
END;
END LOOP;
END;您还可以使用SQL来分隔违反外键的行,例如
INSERT INTO error_table( field1, field2 )
SELECT field1, field2
FROM source_table
WHERE NOT EXISTS(
SELECT 1
FROM parent_table
WHERE parent_table.field1 = source_table.field1 );
INSERT INTO destination_table( field1, field2 )
SELECT field1, field2
FROM source_table
WHERE EXISTS(
SELECT 1
FROM parent_table
WHERE parent_table.field1 = source_table.field1 );https://stackoverflow.com/questions/4949357
复制相似问题