Manipuler des données par le biais des curseurs
I. Introduction
Les curseurs permettent de parcourir un jeu de données issu d’une requête de sélection et de traiter individuellement chaque ligne.
En règle générale, nous traitons les lignes par lot.
Toutes les lignes du lot font l’objet d’un traitement similaire.
Mais nous avons besoin, parfois, de différencier les opérations à exécuter en fonction de la valeur des colonnes d’une ligne.
Les curseurs sont une extension logique des jeux de résultats qui permettent aux applications de manipuler le jeu de résultats ligne par ligne. Nous retrouverons les mêmes principes mis en œuvre dans le cas de la manipulation de données au travers de composants tiers ADO associés à des fournisseurs de données ODBC ou OLE DB.
Nous allons découvrir au cours de cette séance les différentes instructions relatives aux curseurs :
- La déclaration du curseur
- L’ouverture et la fermeture
- Le parcours du curseur
- La destruction du curseur
II. Déclaration d’un curseur
Un curseur est une variable d’un type particulier CURSOR. Il se déclare donc à l’aide du mot clé DECLARE.
Exemple :
Mots clés FORWARD_ONLY et SCROLL
Par défaut un curseur est en défilement vers l’avant uniquement . C’est le cas le plus fréquent d’utilisation : on lit le curseur séquentiellement depuis la première ligne jusqu’à la dernière au moyen de l’opération FETCH NEXT.
Mais il est possible d’étendre les fonctionnalités de parcours de ce dernier en complétant la définition du curseur à l’aide du mot clé SCROLL.
Il sera alors possible d’utiliser de multiples opérations de déplacement, de manière relative ou absolue, par le biais des instructions FIRST, LAST, PRIOR, NEXT, RELATIVE et ABSOLUTE.
Le jeu de résultats est généré à partir de l’instruction SELECT spécifiée lors de la définition du curseur.
III. Ouverture et lecture
L’instruction OPEN déclenche l’exécution de la requête SELECT sous-jacente et charge le jeu de résultats.
Exemple :
Open list_C
L’instruction FETCH charge les valeurs de la ligne dans la liste de variables précisée en complément au niveau du mot clé INTO.
Exemple :
L’instruction FETCH peut être utilisée avec les arguments suivants :
NEXT
Renvoie la ligne de résultats immédiatement après la ligne courante, et incrémente cette dernière de la ligne renvoyée. Si FETCH NEXT est la première extraction effectuée sur un curseur, cette instruction renvoie la première ligne dans le jeu de résultats. NEXT est l'option d'extraction du curseur par défaut.
PRIOR
Renvoie la ligne de résultats immédiatement avant la ligne courante, et décrémente cette dernière en fonction de la ligne renvoyée. Si FETCH PRIOR est la première extraction effectuée sur un curseur, aucune ligne n'est renvoyée et le curseur reste placé avant la première ligne.
FIRST
Renvoie la première ligne dans le curseur et la transforme en ligne courante.
LAST
Renvoie la dernière ligne dans le curseur et la transforme en ligne courante.
ABSOLUTE {n | @nvar}
Si n ou @nvar est un nombre positif, cela renvoie l'énième ligne depuis le début du curseur et transforme la ligne renvoyée en nouvelle ligne courante. Si n ou @nvar est un nombre négatif, cela renvoie l'énième ligne avant la fin du curseur et transforme la ligne renvoyée en nouvelle ligne courante. Si n ou @nvar est égal à 0, aucune ligne n'est renvoyée. n doit correspondre à une valeur constante de type entier et @nvar doit être de type smallint, tinyint ou int.
RELATIVE {n | @nvar}
Si n ou @nvar est un nombre positif, cela renvoie l'énième ligne à partir de la ligne courante et transforme la ligne renvoyée en nouvelle ligne courante. Si n ou @nvar est un nombre négatif, il renvoie l'énième ligne avant la ligne courante et transforme la ligne renvoyée en nouvelle ligne courante. Si n ou @nvar est égal à 0, la ligne courante est renvoyée.
INTO
Permet de préciser la liste des variables recevant la valeur des colonnes.
Cette liste doit respecter l’ordre des colonnes de l’ordre SELECT à l’origine du jeu de résultats.
@@FETCH_STATUS
Renvoie l'état de la dernière instruction FETCH effectuée sur un curseur actuellement ouvert par la connexion.
Valeurs renvoyées par l’instruction FETCH 0 : L'instruction FETCH a réussi.
- : L'instruction FETCH a échoué ou la ligne se situait au-delà du jeu de résultats.
- : La ligne recherchée est manquante.
IV. Un exemple à la loupe
Dans la base de données " Dans la base de données “Gestion des comptes bancaires” :
Exemple 1 :
V. Processus des curseurs en bref
Pour utiliser un curseur, vous devez mettre en œuvre le processus suivant :
- Associez un curseur au jeu de résultats d'une instruction SELECT et définissez les caractéristiques du curseur.
- Exécutez l'instruction OPEN pour remplir le curseur.
- Dans le curseur que vous voulez parcourir, extrayez les lignes au moyen de la commande FETCH. L'opération consistant à récupérer une ligne ou un bloc de lignes à partir d'un curseur est appelée une extraction. Le défilement est l'opération consistant à effectuer une série d'extractions afin d'extraire des lignes vers l'avant ou vers l'arrière.
- Vous pouvez éventuellement effectuer des opérations de modification sur la ligne à la position actuelle du curseur.
- Fermez le curseur à l’aide de l’instruction CLOSE.
- Libérez la mémoire allouée au curseur avec DEALLOCATE
Exemple 2 :
Exemple 3 :
VI. Atelier pratique
A. Exécuter les exemples précédents B. Dans la base de données “Comptoir Anglais” :
- Réaliser une procédure stockée qui affiche :
2. Réaliser une procédure stockée qui affiche:
Pas encore de commentaires.
Ajouter un commentaire
Veuillez vous connecter pour ajouter un commentaire.