Получение ORA-00001 (нарушение уникального ограничения) при COMMITing? - PullRequest
7 голосов
/ 01 февраля 2010

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

Вопросы:

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

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


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

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

Ответы [ 2 ]

5 голосов
/ 01 февраля 2010

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

set constraints all immediate;

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

3 голосов
/ 01 февраля 2010

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

http://www.oracle -base.com / статьи / 8i / ConstraintCheckingUpdates.php

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

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

...