Cours en Devlopement Informatique

  • SQL SEVER

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 :

2.1 Défilement

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.

2.2 Génération du jeu de résultats

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
3.1 Lecture

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.

  1. : L'instruction FETCH a échoué ou la ligne se situait au-delà du jeu de résultats. 
  2. : 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:

  1. Réaliser une procédure stockée qui affiche :

2. Réaliser une procédure stockée qui affiche:

 

Ajouter un commentaire

Veuillez vous connecter pour ajouter un commentaire.

Pas encore de commentaires.