2017-05-02 6 views
0

プロジェクトでは、hibernateをORMツールとして使用しています。ストアドプロシージャを呼び出す必要があるシナリオがあります。このストアドプロシージャは、カーソルを内部的に使用して、データベーステーブルに格納されているルールのリストを参照します。ハイバーネーションで呼び出されたときにカーソルを含むストアドプロシージャが失敗します。

我々は、カーソルを反復処理しているとき、私たちは@@ sqlstatusとをチェック!= 2。カーソル内の結果セットが完全に横断されたとき、sqlstatusは2になります。

我々は直接EXECを使用してストアドプロシージャを実行すると、それは結果を返します。また、java JDBCコードも実行します。しかし、私たちがhibernateを呼び出すと、何らかの形でsqlstatus = 2が見つかるため、@@ sqlstatus!= 2の条件チェックで失敗します。ストアドプロシージャでデバッグ文をほとんど試しませんでした。結果セットをsqlstatus = 2としてトラバースし、ストアドプロシージャはnullを返します。私たちは、Sybase ASE 15.7を使用している

、4.1バージョンを休止。

問題の原因を教えてください。

答えて

0

結果セットの終わりを示し、典型的には、その条件が発生するまで、カーソルが読み取られるので、カーソルは、@@ = 2 sqlstatusはに到達することが当然です。まさになぜこれがあるシナリオで起こり、別のシナリオで起こるのではないか、ここに誰かが理解できるようなものではないでしょう。データが異なっている(シナリオの1つにオープントランザクションがあるか)か、その他の点で違いがあるかもしれません。あなたのSQLコードのいくつかのデバッグを行う必要があるように見えます。

関連する問題