2009-07-20 5 views

Répondre

11

Il crée un cursor pour la requête, ce qui vous permet d'effectuer une itération sur l'ensemble de résultats sans extraire le résultat entier en une fois. Un scrollable cursor, en particulier, est celui qui permet de revenir en arrière.

Exemple d'utilisation: Vous pouvez faire défiler jusqu'à ce que vous trouviez l'enregistrement dont vous avez besoin et revenir en arrière pour aller chercher les enregistrements précédents, si vous en avez également besoin.

+2

Si vous envisagez de les utiliser devrait également se référer à la documentation dbms (actuelle) pour savoir quel type de curseur vous utiliserez: pour certains d'entre eux, la version scrollable est beaucoup plus "chère" qu'un curseur "forward-only", voire indisponible. – VolkerK

7

Wikipedia donne ceci:

Avec un curseur non scrollable, également connu sous le nom avant uniquement, on peut FETCH chaque ligne au plus une fois, et le curseur se déplace automatiquement à la suite suivant rangée. Une opération d'extraction après la dernière ligne a été récupérée positionne le curseur après la dernière ligne et renvoie SQLSTATE 02000 (SQLCODE +100).

Et ceci:

Un programme peut placer un curseur scrollable partout dans le jeu de résultats en utilisant l'instruction FETCH SQL.

Vous devriez lire l'article lié plus tôt, mais cela ressemble à des informations intéressantes aussi:

peuvent potentiellement curseurs de défilement accéder à la même ligne dans le jeu de résultats plusieurs fois. Ainsi, les données modifications (insérer, mettre à jour, supprimer opérations) à partir d'autres transactions pourraient avoir un impact sur le résultat ensemble.

En PHP, vous pouvez utiliser les curseurs de défilement avec PDO en utilisant les commandes préparées (voir PDOStatement::fetch):

Pour demander un curseur pour votre objet PDOStatement, vous devez définir PDO :: Attribut ATTR_CURSOR à PDO :: CURSOR_SCROLL lorsque vous préparez l'instruction SQL avec PDO :: prepare().

(il y a aussi un exemple plus bas cette page)

Quelle est la capacité semble intéressant de « faire défiler » à travers le resultset, sans avoir à obtenir toutes les données en mémoire pour itérer dessus.

1

Pour Mysql ... pas pris en charge = non disponible (ni mysql (i) ni AOP):

mysqli_result :: data_seek(), notez que le manuel précise: « Cette fonction ne peut être utilisé avec tampon résultats obtenus à partir de l'utilisation des fonctions mysqli_store_result() ou mysqli_query()."En d'autres termes, la recherche a lieu sur une copie du jeu de résultats localement mise en cache: pas sur le serveur, donc elle ne supporte pas la suggestion d'un" curseur défilant "