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

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

вопросы:

  • как получилось, что уникальное ограничение проверяется при фиксации? (Есть ли некоторые настройки, которые мы можем использовать, чтобы проверка происходила во время вставки?)
  • как мы можем узнать оскорбительный 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

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