2009-07-20 15 views

答えて

11

クエリーにはcursorが作成されます。これにより、結果全体を一度にフェッチせずに結果セットを反復処理できます。 A scrollable cursorは、具体的には、反復処理を可能にするものです。

使用例:必要なレコードが見つかるまで前方にスクロールし、必要に応じて前のレコードをフェッチすることができます。

+2

(実際の)dbmsのドキュメントを参照して、使用するカーソルの種類を調べる必要があります。その中には、スクロール可能なものは、前方のみのカーソルよりもはるかに「高価」であり、使用できないものもあります。 – VolkerK

7

Wikipediaこの与える:さらに 前方のみとしても知られている非スクロールカーソルで

を、一方はせいぜい一度 各行を取得することができ、カーソル が自動的直後 に移動します行。最後の行が の後のフェッチ操作 最後の 行の後ろにカーソルを置き、SQLSTATE 02000 (SQLCODE + 100)を戻します。

そして、この:

プログラムは、結果のどこにでもスクロール カーソルを置くことFETCH SQLステートメントを使用して を設定します。

あなたは、以前のリンク先の記事を読む必要がありますが、これはあまりにもいくつかの興味深い情報のようになります。

スクロール可能カーソルは、潜在的に アクセス結果の同じ行が を複数回設定することができます。したがって、他のトランザクション の変更(挿入、更新、削除 操作) は、結果に影響を与える可能性があります 。

PHPでは、あなたは(PDOStatement::fetchを参照)プリペアドステートメントを使用してPDOでのスクロール可能カーソルを使用することができます。

が のためのあなたのPDOStatementオブジェクトをスクロール可能なカーソルを要求するには、あなたはPDO :: を設定する必要がありますPDO :: prepare()を使用して のSQL文を準備するときは、PDO :: CURSOR_SCROLLを に設定します。

(例はさらにそのページの下にもあります)

興味深いと思われることは、メモリ内のすべてのデータが、それを反復して取得することなく、結果セットを通じて「スクロール」する機能です。

MySQLの
1

...(どちらもmysqlの(I)やPDO)=利用できませんサポートされていません:

mysqli_result :: data_seek()、マニュアルの状態に注意:この機能は、バッファリングを使用することができます」 mysqli_store_result()またはmysqli_query()関数の使用によって得られた結果。"つまり、サーバー上ではなくローカルにキャッシュされた結果セットのコピーがシークされます。したがって、「スクロール可能なカーソル」の提案はサポートされません。

関連する問題