sql错误 - 唯一约束

rea*_*aln -3 sql oracle plsql primary-key plsqldeveloper

我有一个像这样的数据迁移脚本.

Data_migration.sql

它的内容是


insert into table1 select * from old_schema.table1;
commit;
insert into table2 select * from old_schema.table2;
commit;
Run Code Online (Sandbox Code Playgroud)

并且在执行脚本时table1pk_productname约束

SQL> @ "data_migration.sql" 
Run Code Online (Sandbox Code Playgroud)

我将获得一个唯一的约束(pk_productname)违规.但是当我执行单独的sql语句时,我不会得到任何错误.这背后有任何原因.以及如何解决这个问题.

APC*_*APC 5

唯一约束的失败意味着您尝试插入主键列冲突的一个或多个记录.

如果在运行脚本时发生,但在运行单个语句时没有,则脚本中必定存在错误.在没有看到脚本的情况下,我们无法确定该bug是什么,但最可能的是你以某种方式运行相同的语句两次.

另一个可能的原因是约束被推迟.这意味着它直到事务结束才会强制执行.因此,如果在不发出后续COMMIT的情况下运行它,INSERT语句似乎会成功.

通常在没有启用约束的情况下运行数据迁移.之后使用EXCEPTIONS表重新启用它们.这样可以更轻松地调查问题. 了解更多.