2010-02-01 6 views
7

Wir erhalten eine ORA-00001 (eindeutige Einschränkung verletzt) ​​in einem Batch-Job. Der Fehler tritt jedoch auf, wenn ein COMMIT ausgegeben wird, nicht zu dem Zeitpunkt, zu dem der fehlerhafte Datensatz eingefügt wird. FragenORA-00001 (einmalige Einschränkung verletzt) ​​beim COMMIT-Vorgang erhalten?

:

  • Wie kommt es, dass die eindeutige Einschränkung bei COMMIT geprüft? (Gibt es einige Einstellungen, die wir verwenden können, so dass die Überprüfung zum Zeitpunkt der INSERT erfolgt?)
  • Wie können wir herausfinden, die beleidigende SQL/Datensatz, die zu der eindeutigen Einschränkung Verletzung führen?

Jede Hilfe wird geschätzt!


Weitere Informationen/Frage:

Die "anstößigen" Zwang ist als SOFORTIGEN markiert und NON-DEFERRABLE. Kann dies bei der Transaktion außer Kraft gesetzt werden?

Antwort

5

Einschränkungen hilft als aufschiebbare markiert/definiert werden. In diesem Fall können die Constraint-Prüfungen entweder "sofort" oder "zurückgestellt" sein. Wenn Sie die Abhängigkeit definieren, können Sie einen Standard-/Anfangswert festlegen, initially immediate oder initially deferred. Bei Festlegung auf deferred wird die Einschränkung erst erzwungen, wenn Sie die Transaktion festgeschrieben haben.
Sie können das Verhalten verzögerbarer Einschränkungen ändern, z. über

set constraints all immediate; 

siehe auch: http://www.oracle.com/technology/oramag/oracle/03-nov/o63asktom.html

Verwandte Themen