2010-02-01 392 views
7

Obtenemos un ORA-00001 (restricción única violada) en un trabajo por lotes. Sin embargo, el error ocurre cuando se emite un COMMIT, no en el momento en que se inserta el registro ofensivo.Obteniendo ORA-00001 (restricción única violada) cuando se COMPROMETE?

Preguntas:

  • ¿cómo es que la restricción única se comprueba en COMMIT? (¿Hay alguna configuración que podamos usar para que la verificación se produzca en el momento del INSERT?)
  • ¿Cómo podemos averiguar el SQL/registro ofensivo que conduce a la violación de restricción única?

¡Se agradece cualquier ayuda!


Información adicional/Pregunta:

La restricción de "ofender" se marca como INMEDIATA e improrrogable. ¿Puede esto ser anulado en la transacción?

Respuesta

5

Las restricciones pueden ser marcados/definida como diferible. En ese caso, las verificaciones de restricciones pueden ser "inmediatas" o "diferidas". Al definir la restricción, puede establecer un valor predeterminado/inicial, initially immediate o initially deferred. Cuando se establece en deferred, la restricción se aplica no hasta que se confirma la transacción.
Puede cambiar el comportamiento de las restricciones aplazables, p. a través de

set constraints all immediate; 

ver también: http://www.oracle.com/technology/oramag/oracle/03-nov/o63asktom.html

Cuestiones relacionadas