Traiter efficacement les lignes d’un curseur en SQL peut être complexe.
Une mauvaise gestion des curseurs entraîne des performances dégradées et des erreurs de requête.
Cet article explore l’utilisation de la commande FETCH pour optimiser le traitement des lignes dans un curseur.
Maîtriser le langage SQL en environnement SGBDR. SQL n'aura plus de secrets pour vous !
L’objectif de ce document est de vous enseigner comment traiter les lignes d’un curseur en SQL. Vous apprendrez à utiliser la commande FETCH pour récupérer les données ligne par ligne depuis un ensemble actif de données.
Traitement des lignes SQL avec curseurs
Le traitement des lignes dans un curseur est essentiel pour parcourir et manipuler les résultats d’une requête SQL. Pour accéder à la ligne suivante dans l’ensemble actif de données, vous devez utiliser la commande FETCH. Cette commande récupère les valeurs des colonnes pour la ligne suivante et les place dans des variables ou des enregistrements spécifiés.
FETCH
{ INTO { | [ , . . . ] } | BULK COLLECT INTO };
Exemple d'utilisation de FETCH en SQL
L’exemple suivant illustre comment traiter les lignes d’un curseur en utilisant la commande FETCH. Nous allons créer un curseur pour récupérer des informations sur des clients en fonction de leur ville et de leur pays, puis afficher chaque client récupéré.
SET SERVEROUTPUT ON;
DECLARE
-- Déclaration d'un enregistrement pour stocker les données du client
TYPE client_record IS RECORD (
nom clients.nom%TYPE,
ville clients.ville%TYPE,
pays clients.pays%TYPE
);
var_client client_record; -- Variable pour stocker une ligne de client
-- Déclaration du curseur avec des paramètres pour "ville" et "pays"
CURSOR cur_client(var_ville clients.ville%TYPE,
var_pays clients.pays%TYPE)
IS
SELECT nom, ville, pays FROM clients WHERE ville = var_ville AND pays = var_pays;
BEGIN
-- Ouverture du curseur avec des paramètres spécifiques
OPEN cur_client(var_ville => 'Toulouse', var_pays => 'France');
-- Vérification si le curseur est ouvert
IF cur_client%ISOPEN THEN
LOOP
-- Récupération de la ligne suivante dans le curseur
FETCH cur_client INTO var_client;
-- Sortie de la boucle si aucune ligne n'est trouvée
EXIT WHEN cur_client%NOTFOUND;
-- Affichage des informations du client
DBMS_OUTPUT.PUT_LINE(var_client.nom || ' ' || var_client.ville || ' ' || var_client.pays);
END LOOP;
END IF;
-- N'oubliez pas de fermer le curseur après son utilisation
CLOSE cur_client;
END;
Explication de l’exemple :
- Configuration de la sortie :La commande SET SERVEROUTPUT ON; permet d’afficher les résultats des messages générés par DBMS_OUTPUT.PUT_LINE.
- Déclaration d’un enregistrement :Un type d’enregistrement client_record est défini pour stocker les informations d’un client, incluant les champs nom, ville et pays.
- Déclaration d’une variable :La variable var_client est déclarée pour stocker une ligne de données du curseur.
- Déclaration du curseur :Le curseur cur_client est déclaré avec des paramètres pour ville et pays, et la requête SQL sélectionne les colonnes nom, ville et pays à partir de la table clients.
- Ouverture du curseur :Le curseur est ouvert avec des valeurs spécifiques pour ville et pays.
Gestion des lignes avec boucle PL/SQL
- Une boucle LOOP est utilisée pour parcourir les lignes du curseur.
- La commande FETCH cur_client INTO var_client; récupère la ligne suivante et la stocke dans var_client.
- La condition EXIT WHEN cur_client%NOTFOUND; sort de la boucle lorsque toutes les lignes ont été traitées.
- DBMS_OUTPUT.PUT_LINE est utilisé pour afficher les informations de chaque client récupéré.
- Fermeture du curseur :Enfin, le curseur est fermé avec CLOSE cur_client;, ce qui libère les ressources associées.
Apres exécution de bloc PL/SQL il s’affiche le message suivant
Formez-vous gratuitement avec Alphorm !
Maîtrisez les compétences clés en IT grâce à nos formations gratuites et accélérez votre carrière dès aujourd'hui.
FAQ
Comment utiliser la commande FETCH en SQL ?
Pourquoi est-il important d'ouvrir et de fermer un curseur SQL ?
Comment déclarer un curseur avec des paramètres en SQL ?
Quels sont les avantages de l'utilisation de la commande FETCH dans une boucle ?
Comment afficher les résultats d'un curseur en SQL ?
Conclusion
Comprendre comment manipuler les curseurs et traiter les lignes SQL est essentiel pour optimiser vos requêtes. Comment pourriez-vous appliquer ces techniques dans vos projets SQL actuels ?