2016-07-11 15 views
1

Ich rufe eine Oracle Stored Procedure von Java an, und habe kein Problem, Eingangsparameterwerte zu senden und die Ausgangsparameterwerte zurück an Java zu senden, sobald ich die CallableStatement ausführe.Gespeicherte Prozedur von Java aufrufen - Ausnahme nicht bei ORA-Fehler ausgelöst

Allerdings, wenn ich ein paar schlechten Daten in die Stored Procedure senden (um einen Fehler zu erzwingen) und führen Sie die CallableStatement ‚s execute Methode, würde ich erwarten, dass ein SQLException in meiner Methode geworfen werden. Dies passiert nicht und der Code wird normal fortgesetzt.

Wenn ich die Stored Procedure über SQL Developer ausführen, kann ich deutlich eine Oracle-Fehlermeldung (Code ORA-06502) im Log-Fenster angezeigt. Daher ist es für mich ein Rätsel, warum mein Java-Code keine Fehlermeldung erfasst.

Hat jemand eine Idee, was die Quelle dieses Verhaltens ist? Führt die gespeicherte Prozedur den Fehler nicht korrekt aus; ist das Java try/catch nicht erkennen, die Ausnahme ausgelöst? Leider habe ich keinen Zugriff auf den Stored Proc-Code, um zu überprüfen, wie sie mit Fehlern umgehen.

Alle Zeiger sind willkommen.

+0

Ich glaube nicht, dass eine SQLException geworfen wird Uness die gespeicherte proc wird explizit zu tun codiert. https://community.oracle.com/thread/129500?start=0&tstart=0. Es besteht kein Zweifel, dass die JVM es abfangen wird, wenn eine Ausnahme ausgelöst wird. – duffymo

+1

Zeigen Sie uns den Code der Prozedur und den Java-Code, die die Prozedur aufrufen – Dazak

Antwort

0

Java wirft SQLException nicht, weil die Java-Funktion Call Call Stored Procedure (CallableStatement) den Befehl erfolgreich an Oracle gesendet hat. Wenn diese Prozedur mit Erfolg ausgeführt wird, gibt uns die Methode von CallableStatement 0, andernfalls von 0, so dass Sie SQLException nicht sehen.

Aber im Falle von SQLDeveloper, Es ist eine wahre Interpreter SQL für Oracle, so dass Sie die SQLException sehen können.

0

Ausnahme wird nur ausgelöst, wenn Ihre erste ausführbare Anweisung in der gespeicherten Prozedur fehlschlägt. Wenn zumindest eine Anweisung korrekt ausgeführt wird, wird die erste Ausnahme nicht ausgelöst.

Sie können versuchen, die Transaktion selbst in die gespeicherte Prozedur einzufügen und eine Ausnahme abzufangen, wenn eine Anweisung fehlschlägt und eine Ausnahme vom catch-Block auslöst. All dies in der gespeicherten Prozedur.