2010-02-01 8 views
7

Nous obtenons une ORA-00001 (contrainte unique violée) dans un travail par lots. Toutefois, l'erreur se produit lorsqu'un COMMIT est émis, pas au moment où l'enregistrement incriminé est inséré.Obtention de ORA-00001 (violation d'une contrainte unique) lors de la COMMITATION?

Questions:

  • Comment ça se fait que la contrainte unique est vérifiée à COMMIT? (Y a-t-il des paramètres que nous pouvons utiliser pour que la vérification se produise au moment de l'INSERT?)
  • Comment trouver l'enregistrement SQL/offensant qui a conduit à la violation de contrainte unique?

Toute aide est appréciée!


Informations complémentaires/Question:

La contrainte "incriminée" est marquée comme IMMEDIATE et NON-DEFERRABLE. Cela peut-il être annulé dans la transaction?

Répondre

5

Les contraintes peuvent être marqués/définis comme reportables. Dans ce cas, les vérifications de contraintes peuvent être "immédiates" ou "différées". Lors de la définition de la contrainte, vous pouvez définir une valeur par défaut/initiale, initially immediate ou initially deferred. Lorsque cette propriété est définie sur deferred, la contrainte n'est pas appliquée tant que vous n'avez pas validé la transaction.
Vous pouvez modifier le comportement des contraintes différentielles, par ex. via

set constraints all immediate; 

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

Questions connexes