2016-04-04 9 views
0

Ich benutze jdbc mit Autocommit aus. Und ich habe eine Tabelle mit einem eindeutigen Index. Ist es möglich, dass die Ausnahme für die Constraint-Verletzung bei Connection # Commit auftritt und nicht bei PreparetStatement # execute.Wenn die Ausnahme für Contrain-Verletzung eintritt

In meinem Fall (Oracle) tritt es immer auf "Ausführen" auf. Kommt es auf die Datenbank an?

+0

Eine seltsame Frage. Was genau musst du wissen? Beim Ausführen, wenn Änderungen auf DB-Seite ausgeführt werden, tritt die Ausnahme auf. Das ist richtig. Im Falle einer Stapelaktualisierung kann es später passieren (wenn alle Änderungen an die DB gesendet werden) – StanislavL

Antwort

2

Normalerweise werden Einschränkungen beim Ausführen des Befehls und nicht beim Festschreiben ausgewertet.

SQL verfügt jedoch über eine Funktion zum Definieren von Einschränkungen als DEFERRABLE: Dann kann die Integritätsprüfung auf den Zeitpunkt verschoben werden, an dem die Transaktion abgeschlossen ist.

In Oracle kann dieses Verhalten mit der DEFERRABLE-Klausel in der Constraint-Definition und dem SET CONSTRAINTS DEFERRED-Befehl erreicht werden.

+0

Nitpick: Wenn eine Einschränkung als DEFERRABLE deklariert wird, dann ist es genau das, aufschiebbar, dh es ist *** möglich *** zu haben Sie werden zur Commit-Zeit überprüft, aber es kann immer noch der Fall sein, dass sie sofort überprüft wird (wenn die Deklaration nicht INITIALLY DEFERRED oder ähnliches enthält). –

+0

@ErwinSmout Sie haben Recht, geänderte Formulierung, um die Fähigkeit auszudrücken – wero

Verwandte Themen