1

Oracle 11.2 データベースでストアド プロシージャを呼び出す Java メソッドを実行しています。OUT パラメータを指定してストアド プロシージャを呼び出す JDBC 接続を使用して、結果セットとしてデータベース カーソルを Java メソッドに戻しています。すべてが正常に機能しています。

ここで、2 番目の結果セットを同じストアド プロシージャの Java メソッドに返したいと考えています。このストアド プロシージャに 2 番目の OUT パラメータを追加して 2 番目のカーソルを開くと、すべて正常に動作するように見えます。

両方のカーソルが単にストアド プロシージャで開かれ、Java メソッドを使用してそれらを閉じるため、これが適切かどうか疑問に思っています。

カーソルまたは結果セットのいずれかで、最初のカーソルがOPEN編集され、その後いくつかのものを選択し、次にOPEN別のものを選択して 2 番目のカーソルを編集するという事実に起因する問題が発生しますか? 2 番目に選択されたものは、最初に選択されたものを台無しにしますか、それともその逆ですか? または、データベースは 2 番目のカーソルがいつ開かれるかを認識できるほどスマートですか?新しい選択は、最初のカーソルが開かれるのではなく、そこに向けられますか?

私はこれらすべてに慣れていないので、これがJavaの対応する結果セットに複数のカーソルを返す方法であることを確認したかっただけです。コメントありがとうございます。

4

1 に答える 1

2

両方のカーソルは、完全に異なる SCN の結果を返す完全に異なるクエリを指す完全に異なるエンティティです。したがって、データベースからの混乱のリスクはありません。Java コードは、個別ResultSetにフェッチする必要がある個別のオブジェクトを取得するため、コードは右からフェッチしていることを確認する必要ResultSetがあります。混乱がある場合は、コードのバグである可能性が高くなります。間違ったカーソルからフェッチするか、すべての場合で両方のカーソルを閉じることができません。

ストアド プロシージャから複数のカーソルを返すことは技術的には十分に可能ですが、より良い解決策があるのではないかと思いがちです。ほとんどの場合、関連するカーソルが複数ある場合は、呼び出し元のコードが何らかの結合操作を手動でコーディングしていることを意味します。その場合は、Oracle に結合させて単一のREf CURSOR.

于 2012-04-14T19:30:50.317 に答える