17


3

「スクロール可能なカーソルを使った行のフェッチ」とは何ですか?

3 Answer


14


クエリ用に cursorが作成されます。これにより、結果全体を一度に取得することなく結果セットを反復処理できます。 具体的には、 scrollable cursorは、逆方向に繰り返すことを可能にするものです。

使用例:必要なレコードが見つかるまで前方にスクロールし、必要な場合は前のレコードを取り出すために繰り返し戻ることができます。


8


_ スクロールのみのカーソル(フォワード専用とも呼ばれる)を使用すると、各行を最大で1回FETCHでき、カーソルは次の行に自動的に移動します。 最後の行が取り出された後の取り出し操作は、カーソルを最後の行の後に置き、SQLSTATE 02000(SQLCODE 100)を戻します。 _

この :

_ プログラムは、FETCH SQLステートメントを使用して、結果セット内の任意の場所にスクロール可能なカーソルを配置できます。 _

先にリンクされた記事を読むべきですが、これも興味深い情報のように見えます。

_ スクロール可能なカーソルは、結果セットの同じ行に複数回アクセスする可能性があります。 したがって、他のトランザクションからのデータ変更(挿入、更新、削除操作)は結果セットに影響を与える可能性があります。 _

PHPでは、準備されたステートメントを使用して、PDOでスクロール可能なカーソルを使用できます(http://php.net/manual/en/pdostatement.fetch.php [`+ PDOStatement

fetch +`]を参照) :

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

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

面白いと思われるのは、結果セットを繰り返すためにメモリ内のすべてのデータを取得する必要なしに、結果セットを「スクロール」する機能です。


2


MySQLの場合 サポートされていない=使用不可(mysql(i)でもPDOでもない):

mysqli_result

data_seek()、マニュアルには、次のように記載されていることに注意してください。 *つまり、検索はサーバー上ではなく、結果セットのローカルにキャッシュされたコピーで行われます。 したがって、「スクロール可能なカーソル」の提案はサポートされていません。