Ошибка SQL - уникальное ограничение - PullRequest
0 голосов
/ 09 ноября 2011

У меня есть один сценарий переноса данных, подобный этому.

Data_migration.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, я не получаю никакой ошибки.Любая причина этого.И как это решить.

1 Ответ

5 голосов
/ 09 ноября 2011

Сбой ограничения уникальности означает, что вы пытаетесь вставить одну или несколько записей, столбцы первичного ключа которых сталкиваются.

Если это происходит, когда вы запускаете скрипт, а не когда вы запускаете отдельные операторы, тогда должна быть ошибка в вашем скрипте . Не видя сценария, мы не можем быть уверены, что это за ошибка, но, скорее всего, вы как-то выполняете одно и то же утверждение дважды.

Другая возможная причина заключается в том, что ограничение отложено. Это означает, что он не применяется до конца транзакции. Таким образом, оператор INSERT будет казаться успешным, если вы запустите его, не выполняя последующий COMMIT.

Обычно миграция данных выполняется без включенных ограничений. Затем включите их снова, используя таблицу EXCEPTIONS. Это облегчает расследование проблем. Узнайте больше .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...