Tutoriel et code d'exemple du curseur MySQL

Tutoriel et code d'exemple du curseur MySQL
Ce tutoriel vous donnera une répartition rapide de l'utilisation des curseurs MySQL dans une procédure stockée, des fonctions stockées ou des déclencheurs pour exécuter un résultat à partir de l'instruction SELECT.

Dans la plupart des cas, lors de l'exécution de requêtes SQL à l'aide de Shell MySQL ou MySQL Workbench, nous n'enregistrons pas les résultats, même si nous avons la fonctionnalité pour enregistrer les résultats traités par le serveur à l'aide d'une procédure stockée.

Dans ce tutoriel, je ne discuterai pas des procédures, des fonctions ou des déclencheurs stockés. Au lieu de cela, je vais simplement plonger pour vous montrer comment vous pouvez utiliser les curseurs MySQL pour exécuter les résultats dans les procédures stockées.

Avant de commencer à créer et à utiliser un curseur avec des exemples, prenons un moment pour discuter de quelques points clés sur un curseur que vous devez connaître:

Caractéristiques d'un curseur MySQL

  1. Un curseur est en lecture seule et ne peut pas mettre à jour ou supprimer des données dans l'ensemble de résultats de la procédure.
  2. Un curseur doit être déclaré avant de pouvoir être utilisé. La définition du curseur n'est qu'une étape pour dire à MySQL qu'un tel curseur existe et ne récupère pas et ne récupère pas.
  3. Vous ne pouvez récupérer que des données dans l'ordre spécifié par l'instruction SELECT et non dans aucun ordre inverse, communément appelé.
  4. Vous utilisez un curseur en l'ouvrant puis effectuez des opérations de récupération sur les données stockées.
  5. Vous devez fermer un curseur après la fin des opérations de récupération.

Maintenant que nous savons ce que signifie un curseur, nous pouvons commencer à illustrer comment il fonctionne en utilisant des exemples du monde réel:

Utilisation de base

La syntaxe générale pour déclarer un curseur dans MySQL est simple. Nous commençons par utiliser le mot clé Declare comme indiqué dans la requête de l'échantillon ci-dessous:

Comment déclarer un curseur

Declare Cursor_Name Cursor pour select_expression;

Le curseur_name est le nom donné au curseur pendant la déclaration. Notez que la déclaration d'un curseur doit être après toute variable déclarée pour empêcher MySQL de entraîner des erreurs.

Ensuite, le select_expression, qui stocke l'instruction SELECT associée au curseur.

Comment ouvrir un curseur

Une fois que nous avons déclaré un curseur et MySQL est conscient que le curseur existe, nous pouvons commencer à l'utiliser qui nécessite que le curseur soit ouvert.

La syntaxe générale pour ouvrir un curseur est comme indiqué dans la requête ci-dessous:

Open Cursor_name;

Cette commande ouvre les curseurs référencés par son nom et on peut commencer à l'utiliser.

Comment récupérer les données

Avoir le curseur ouvert vous permet de récupérer les informations stockées dans une procédure, une fonction ou un déclencheur.

La syntaxe générale pour récupérer les données à l'aide d'un curseur est comme indiqué:

Fetch cursor_name en variables;

NOTE: Comme mentionné, assurez-vous que le curseur est utilisé après que les variables sont déclarées pour éviter les erreurs.

Comment fermer et libérer un curseur

Une fois les opérations nécessitant le curseur défini terminé, il est préférable de fermer le curseur qui libère la mémoire qui lui est associée.

Une fois qu'un curseur a été fermé, un utilisateur doit rouvrir le curseur à l'aide des mots clés ouverts (illustré ci-dessus) avant d'utiliser le curseur.

Vous n'avez pas besoin de déclarer le curseur après la déclaration de clôture.

La syntaxe générale pour fermer un curseur est comme indiqué dans la requête ci-dessous:

Close Cursor_name;

La gestion des erreurs

MySQL Cursor fonctionne en lisant récursivement la ligne suivante dans l'ensemble de résultats. Si la ligne suivante n'est pas disponible, le curseur se ferme et ne renvoie pas les données sauf si spécifiées. Cela peut être un problème surtout après que le curseur atteigne la fin du résultat.

En tant que solution, un gestionnaire non trouvé est défini. Cela spécifie les mesures à prendre si la ligne suivante n'est pas trouvée.

La syntaxe générale pour la gestion des erreurs lors de l'utilisation d'un curseur est:

DÉCLAREZ LE PROCESSION HANDER INTENDRE SET TERMINE = TRUE;

La valeur de terminaison est une variable utilisée pour spécifier que le curseur a atteint la fin du résultat. Le nom de la variable peut être n'importe quel nom tant qu'il s'adapte à la convention de dénomination de la variable MySQL.

NOTE: Comme toutes les variables utilisées dans un curseur, elle doit être définie avant d'être utilisée dans le curseur.

Exemple de cas d'utilisation

Créons un curseur qui collecte les e-mails des clients disponibles dans le tableau client de la base de données de l'exemple de Sakila.

La ressource pour le téléchargement et l'installation de la base de données Sakila est ci-dessous:

https: // dev.mysql.com / doc / sakila / en /

Ce qui suit illustre une procédure qui utilise un curseur pour récupérer les e-mails:

Utilisez Sakila;
Délimiteur $$
Créer une procédure CreateEnewSletter (
Courriels Inout Varchar (4000)
)
COMMENCER
Declare Terminal int Default False;
DÉCLARIEZ EMAILADDR VARCHAR (255) par défaut "";
DÉCLAREZ COLLECT_EMAIL CURSOR POUR SELECT EMAIL DE SAKILA.Client où (Adresse_ID> 100 et Adresse_ID < 200);
Déclarer le gestionnaire de poursuite pour un ensemble non trouvé terminal = true;
Ouvert collection_email;
getemails: boucle
Récupérer Collect_Email dans EmailAddr;
Si terminer = true alors
Laissez GetEmails;
FIN SI;
Définir des e-mails = concat (emailAdDR, "|", e-mails);
End Loop GetEmails;
Close Collect_Email;
Fin $$
Délimiteur;
Définissez @emails = "";
Appel CreateEnewSletter (@Collect_Email);
Sélectionnez @Collect_email;

Une fois la requête exécutée, vous obtiendrez une sortie comme indiqué ci-dessous:

Conclusion

Dans ce didacticiel, nous avons traversé l'utilisation des curseurs MySQL pour analyser les données stockées dans l'ensemble de résultats. Considérez la documentation pour maîtriser comment implémenter les curseurs.