Ich bekomme diese Ausnahme von Commits und Rollbacks, bin mir aber nicht sicher, was genau an meiner Stored Procedure falsch ist. Ich habe die Antworten in anderen solchen Fragen gelesen und bin nicht in der Lage zu finden, wo genau die Anzahl der Commits durcheinander gebracht wird.
Also, das ist die Stored Procedure, die ich verwende:
%Vor%jetzt rufe ich diese Prozedur im folgenden Code auf:
%Vor% Und ich bekomme eine Ausnahme in der Zeile, die int rowcount = cs.getInt(2);
Die Ausnahme ist:
%Vor%Bitte hilf mir. unter com.microsoft.sqlserver.jdbc.SQLServerCallableStatement.getValue (SQLServerCallableStatement.java:393) unter com.microsoft.sqlserver.jdbc.SQLServerCallableStatement.getInt (SQLServerCallableStatement.java:437) bei mainsoft.tools.purge.PurgeUtils.PurgeLeads (PurgeUtils.java:283)
BEARBEITEN:
Da ich diese Frage selbst beantwortet habe ... möchte ich die Frage jetzt ein wenig ändern.
Warum wurde in der execute-Methode keine Ausnahme ausgelöst?
Sorry Leute! Danke für all Ihre Bemühungen. Am Ende war es ein sehr kleiner Fehler in meinem Stored Procedure:
Siehe Zeile:
%Vor% Es sollte #PURGE_LEAD_E
All Ihre Antworten haben mir geholfen, eine andere Perspektive der Entwicklung von Geschäftsprozeduren zu bekommen. Vielen Dank!
Ihr COMMIT wird wahrscheinlich wegen eines Fehlers nicht getroffen. Die Transaktion wird nicht automatisch zurückgesetzt.
Der beste Weg (und die beste Vorgehensweise) besteht darin, eine SQL-Fehlerbehandlung hinzuzufügen
%Vor%Weitere Details zu dem, was hier vor sich geht, finden Sie in meiner Antwort hier Verschachtelte gespeicherte Prozeduren, die das TRY CATCH ROLLBACK-Muster enthalten?
Hinweis: Sie müssen die temporären Tabellen nicht löschen, da sie den Gültigkeitsbereich verlassen, wenn die gespeicherte Prozedur
beendet wirdDies geschieht normalerweise, wenn die Transaktion gestartet wird und entweder nicht festgeschrieben ist oder nicht zurückgesetzt wird.
Falls der Fehler in Ihrer gespeicherten Prozedur auftritt, kann dies die Datenbanktabellen sperren, da die Transaktion aufgrund einiger Laufzeitfehler in Abwesenheit der Ausnahmebehandlung nicht abgeschlossen wurde Sie können die Ausnahmebehandlung wie unten beschrieben verwenden. SET XACT_ABORT
%Vor%Wie genau enthält die Variable @leadscount die Anzahl der gelöschten Leads?
Dies ist der einzige Ort, an dem ich es benutze:
SELECT @leadscount = (WÄHLE COUNT (*) FROM PURGE_LEAD);
Wie auch immer, um es zu testen, warum führen Sie den obigen Code nicht außerhalb des Transaktionskontexts aus?
Wenn Sie es wirklich in einer Transaktion benötigen, versuchen Sie, den Wert in eine Tabellenvariable zu laden (erstellen Sie eine Tabelle mit nur einer Spalte). Da sie nicht an Transaktionen teilnehmen, können Sie testen, ob die Transaktion Ihr wirkliches Problem ist.
Tags und Links java sql-server database stored-procedures jdbc