We’re getting a ORA-00001 (unique constraint violated) in a batch job. However, the error occurs when a COMMIT is issued, not at the time the offending record is inserted.
Questions:
- How come that the unique constraint is checked at COMMIT? (Are there some settings we can use so that the check occurs at the time of the INSERT?)
- How can we find out the offending SQL/record that lead to the unique constraint violation?
Any help is appreciated!
Additional Information/Question:
The “offending” constraint is marked as IMMEDIATE and NON-DEFERRABLE. Can this be overridden in the transaction?
Constraints can be marked/defined as deferrable. In that case constraint checks can be either “immediate” or “deferred”. When defining the constraint you can set a default/initial value,
initially immediateorinitially deferred. When set todeferredthe constraint is enforced not until you commit the transaction.You can change the behaviour of deferrable constraints e.g. via
see also: http://www.oracle.com/technology/oramag/oracle/03-nov/o63asktom.html