-3

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

数据迁移.sql

它的内容是


insert into table1 select * from old_schema.table1;
commit;
insert into table2 select * from old_schema.table2;
commit;

并且在我执行脚本时table1有约束pk_productname

SQL> @ "data_migration.sql" 

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

4

1 回答 1

5

唯一约束的失败意味着您正在尝试插入其主键列发生冲突的多个记录之一。

如果它发生在您运行脚本时而不是在您运行单个语句时,那么您的脚本中一定存在错误。如果没有看到脚本,我们就不可能确定那个错误是什么,但最有可能的是你以某种方式运行了相同的语句两次。

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

在没有启用约束的情况下运行数据迁移是很常见的。之后使用 EXCEPTIONS 表重新启用它们。这使得调查问题变得更容易。 了解更多

于 2011-11-09T06:11:33.273 回答