oracle plsql 批量导入

在plsql批量导入数据时,难免会有重复数据,如果不确定什么条件会出现重复数据,可有方法,在导入数据时,自动跳过唯一约束。

img

img

批量插入数据时,如果有重复的数据,则忽略此条数据,不插入。
可以通过Sublime Text的块编辑(Notepad ++也有类似功能),即把你截图里面的insert into语句批量改成insert ignore_row_on_dupkey_index into,忽略重复数据,继续插入下一条数据。

img

有帮助的话,麻烦高抬贵手给个采纳,谢谢~

plsql新建命令窗口,然后把这些sql直接全选复制粘贴进去,报错也会继续往下执行

在使用PL/SQL批量导入数据时遇到了ORA-00001:违反唯一约束条件错误,这意味着试图插入重复数据,而该数据在数据库中已经存在。

如果您确定要在数据库中插入重复数据,则可以考虑在插入数据之前先删除数据库中的重复数据。

如果不确定哪些条件会导致重复数据,可以先在某个较小的数据集上测试代码,以确保它的正确性,然后再使用整个数据集进行批量导入。

请确保正确地定义了数据表中的唯一约束,并且在插入数据时遵守了该约束。
可以使用 IGNORE_ROW_ON_DUPKEY_INDEX 参数来解决此问题。使用该参数,在遇到重复数据时,系统将自动跳过该行,不进行插入,并继续处理其他数据。该参数在使用 SQL*Loader 工具时可以作为命令行参数提供,也可以在 control file 中指定。以下是一个例子,使用PL/SQL语句实现批量导入数据,并在遇到唯一约束的错误时自动跳过:

DECLARE
e_unique_violation EXCEPTION;
PRAGMA EXCEPTION_INIT(e_unique_violation, -1);
BEGIN
FOR i IN (SELECT * FROM my_table_to_import) LOOP
BEGIN
INSERT INTO my_target_table (column1, column2, column3)
VALUES (i.column1, i.column2, i.column3);
EXCEPTION
WHEN e_unique_violation THEN
NULL; -- ignore unique violation error
END;
END LOOP;
END;