Получение ORA-00001(уникальное ограничение нарушено) при COMMITing?

Мы получаем ORA-00001 (уникальное ограничение нарушено) в пакетном задании. Однако ошибка возникает при выполнении команды COMMIT, а не во время вставки ошибочной записи.

Вопросы:

  • Как получилось, что уникальное ограничение проверяется в COMMIT? (Есть ли какие-то настройки, которые мы можем использовать, чтобы проверка происходила во время ВСТАВКИ?)
  • Как мы можем обнаружить нарушающую SQL/ запись, которая приводит к уникальному нарушению ограничения?

Любая помощь приветствуется!


Дополнительная информация / Вопрос:

"Оскорбительное" ограничение помечается как НЕМЕДЛЕННОЕ и НЕДОРОЖНОЕ. Может ли это быть переопределено в транзакции?

2 ответа

Решение

Ограничения могут быть помечены / определены как отложенные. В этом случае проверки ограничений могут быть "немедленными" или "отложенными". При определении ограничения вы можете установить значение по умолчанию / начальное значение, initially immediate или же initially deferred, Когда установлено deferred ограничение применяется только до тех пор, пока вы не совершите транзакцию.
Вы можете изменить поведение отложенных ограничений, например, через

set constraints all immediate;

см. также: http://www.oracle.com/technology/oramag/oracle/03-nov/o63asktom.html

Ограничения могут быть определены как отложенные, что означает, что они проверяются при фиксации, а не во время изменения данных. Смотрите следующие 2 ссылки:

http://www.oracle-base.com/articles/8i/ConstraintCheckingUpdates.php

http://www.oracle.com/technology/oramag/oracle/03-nov/o63asktom.html

Надеюсь, поможет

Другие вопросы по тегам