2016-07-11 4 views
1

JavaからOracleストアド・プロシージャをコールしていて、CallableStatementを実行すると入力パラメータ値を送信して出力パラメータ値をJavaに戻すことは問題ありません。Javaからストアド・プロシージャをコール - ORAエラーでスローされない例外

私はCallableStatementexecute方法を(エラーを強制的に)して実行するストアドプロシージャにいくつかの悪いデータを送信するときしかし、私はSQLExceptionが私の方法でスローすることを期待したいです。これは起こらず、コードは通常通り続きます。

SQL Developerを使用してストアドプロシージャを実行すると、ログウィンドウにOracleエラーメッセージ(コードORA-06502)が明瞭に表示されます。だから私のJavaコードがエラーメッセージをキャッチしていないのは私にとって謎です。

この動作の原因は何ですか?ストアドプロシージャはエラーを正しくスローしません。スローされた例外を認識しないJavaのtry/catchですか?残念ながら私はエラーをどのように処理しているかを確認するためにストアドプロシージャコードにアクセスすることはできません。

どのポインタも高く評価されています。

+0

SQLExceptionがスローされるとは思わないが、ストアドプロシージャが明示的にコード化されているとは限りません。 https://community.oracle.com/thread/129500?start=0&tstart=0。例外がスローされた場合、JVMがそれをキャッチすることは間違いありません。 – duffymo

+1

プロシージャのコードと、プロシージャを呼び出すJavaコードを表示します。 – Dazak

答えて

0

コールストアドプロシージャJava関数(CallableStatement)がコマンドをOracleに正常に送信したため、JavaではSQLExceptionがスローされません。このプロシージャが成功して実行された場合、CallableStatementのメソッドは0を返し、それ以外の場合は0でないため、SQLExceptionは表示されません。

しかし、SQLDevelopperの場合、それはOracleのための真のインタープリターSQLです.SQLExceptionを見ることができます。

0

例外は、ストアドプロシージャで最初の実行可能ステートメントが失敗した場合にのみスローされます。最初の1つの例外がスローされない限り、1つのステートメントが正しく実行されないようにしてください。

ストアドプロシージャ自体にトランザクションを挿入し、いずれかのステートメントが失敗してcatchブロックから例外がスローされた場合に例外をキャッチすることができます。このすべてはストアドプロシージャ内にあります。