Получение 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
надеюсь, что это помогает