プロシージャで Oracle カーソルを作成し、そのカーソルをループしてデータをフェッチします。同時に、別のクライアントが、データが私の選択基準に一致するテーブルを挿入または更新します。
カーソルが終了したとき、すべてのデータがクライアントに到達できますか?
プロシージャで Oracle カーソルを作成し、そのカーソルをループしてデータをフェッチします。同時に、別のクライアントが、データが私の選択基準に一致するテーブルを挿入または更新します。
カーソルが終了したとき、すべてのデータがクライアントに到達できますか?
クエリが返すデータのセットは、クエリが開始された時点で固定されています。それがカーソルが開かれたポイントになります。セッションがカーソルを開く前に他のセッションのトランザクションがコミットされた場合、カーソルは新しい行を返します。セッションがカーソルを開く前に他のセッションのトランザクションがコミットされていない場合、カーソルは新しい行を返しません。カーソルからデータがフェッチされるのが 1 ミリ秒後か数日後かは問題ではありません (ただし、Oracle がカーソルが開かれた瞬間のデータの状態を再構築できなくなる可能性が高くなります)。開いたままです)。