本から、私は読んだ
SQLステートメントを実行するたびに、Oracleはコマンドが解析および実行されるメモリ領域を開きます。この領域はカーソルと呼ばれます。
明示カーソルと暗黙カーソルの両方に適用されます。しかし、私は別のことに興味があります-カーソルは、Oracleが最終的なレコードセットを返し、それをレコードをフェッチするためのソースとして使用する(メモリ内の)中間の場所と見なすことができますか?
本から、私は読んだ
SQLステートメントを実行するたびに、Oracleはコマンドが解析および実行されるメモリ領域を開きます。この領域はカーソルと呼ばれます。
明示カーソルと暗黙カーソルの両方に適用されます。しかし、私は別のことに興味があります-カーソルは、Oracleが最終的なレコードセットを返し、それをレコードをフェッチするためのソースとして使用する(メモリ内の)中間の場所と見なすことができますか?
Oracleは、ディスクから取得したレコードを、DBバッファキャッシュと呼ばれる割り当てられたメモリの領域に格納します。ただし、これらはレコードのブロックであり、最終的な結果セットを準備するためにフィルタリングされます。同じテーブル上の他のクエリは、ディスクに移動するのではなく、これらのキャッシュされたレコードを使用できます。概念ガイドには、Oracleのメモリアーキテクチャに関する詳細が記載されています。 ここでそれを読んでください。
今あなたが話していることは少し異なります。Oracleは、個々の結果セットをキャッシュできます。少なくとも11g以降、エンタープライズ版でのみ可能です。明らかに、頻繁に実行され、結果がすぐに古くなることのないクエリのセットをキャッシュすることは意味があります。データベースがそれを理解する方法はありません。そのため、どの結果セットをキャッシュするかをデータベースに指示する必要があります。 詳細をご覧ください。
カーソルは、クエリから返されるデータの中間セットへのポインタです。結果を生成してアクセスするための状態情報が含まれています。Concepts Docから:
カーソルは、特定のプライベートSQL領域への名前またはハンドルです。図14-5に示すように、カーソルはクライアント側ではポインタ、サーバー側では状態と考えることができます。
クエリの結果はaでresult set
あり、カーソルによってポイントされます。これは、メモリまたはディスクのいずれかの一時的な場所に保存されます。コンセプトドキュメントから:
一時表領域には、セッション中のみスキーマオブジェクトが含まれます。ローカルで管理される一時テーブルスペースには、一時ファイル(一時ファイル)があります。一時ファイルは、データをハッシュ、並べ替え、およびその他の操作で格納するように設計された特別なファイルです。メモリに十分なスペースがない場合、一時ファイルには結果セットデータも保存されます。