Comprendre et manipuler efficacement les ensembles de données en PL/SQL peut être complexe.
Ignorer les fonctionnalités des curseurs peut entraîner une manipulation inefficace des données et des performances réduites.
Cet article propose des exercices pratiques pour explorer les curseurs en PL/SQL, offrant des solutions concrètes aux défis de manipulation des données.
Maîtriser le langage SQL en environnement SGBDR. SQL n'aura plus de secrets pour vous !
Dans cette section, nous allons faire un récapitulatif des points essentiels sur les curseurs en PL/SQL et explorer des exercices pratiques pour consolider ces concepts.
Ce que nous avons étudié
- Déclaration des curseurs (CURSOR)
- Ouverture (OPEN) et fermeture (CLOSE) des curseurs
- Traitement des lignes avec FETCH
- Attributs de statut des curseurs :%FOUND, %NOTFOUND, %ISOPEN, et %ROWCOUNT
- Mise à jour des lignes d’un curseur avec FOR UPDATE
- Curseurs et boucle FOR pour itérer sur chaque enregistrement
Utiliser un curseur PL/SQL avec boucle FOR
Énoncé : Créez un bloc PL/SQL qui permet d’afficher toutes les commandes de la table commandes en utilisant un curseur et une boucle FOR.
DECLARE
CURSOR cur_commandes IS SELECT * FROM commandes;
BEGIN
FOR commande IN cur_commandes
LOOP
DBMS_OUTPUT.PUT_LINE('Commande ID : ' || commande.numero_cde || ' - Date : ' || commande.date_cde);
END LOOP;
END;
/
Explication : Ce code utilise un curseur cur_commandes pour parcourir chaque enregistrement de la table commandes. À chaque itération, la boucle FOR affiche l’ID et la date de chaque commande.
Et voici son résultat lors de son exécution :
Curseur avec paramètre : commandes par pays
Énoncé : Créez un bloc PL/SQL qui permet d’afficher le nombre de commandes par client. Le pays de résidence du client sera passé en paramètre au curseur avec une valeur par défaut. Utilisez une boucle FOR avec votre curseur.
DECLARE
CURSOR cur_client_commandes(var_pays clients.pays%TYPE DEFAULT 'France') IS
SELECT numero_cli, COUNT(*) AS total_commandes
FROM commandes
JOIN clients ON commandes.numero_cli = clients.numero_cli
WHERE clients.pays = var_pays
GROUP BY clients.numero_cli;
BEGIN
FOR client_commande IN cur_client_commandes
LOOP
DBMS_OUTPUT.PUT_LINE('Client ID : ' || client_commande.numero_cli || ' - Nombre de commandes : ' || client_commande.total_commandes);
END LOOP;
END;
/
Explication : Dans cet exercice, le curseur cur_client_commandes accepte un paramètre de pays (var_pays). En utilisant une jointure, il sélectionne les clients par pays et compte leurs commandes, puis affiche le résultat pour chaque client.
Et voici son résultat lors de son exécution :
Mise à jour PL/SQL : date et état des commandes
Énoncé : Créez un bloc PL/SQL qui met à jour (à l’aide d’un curseur) la date d’envoi des commandes à la date du jour et l’état de la commande à « TRAITEE » pour les commandes dont la date d’envoi est nulle.
DECLARE
CURSOR cur_commandes IS
SELECT numero_cde FROM commandes WHERE date_envoi IS NULL FOR UPDATE;
BEGIN
FOR commande IN cur_commandes
LOOP
UPDATE commandes
SET date_envoi = SYSDATE, etat_commande = 'TRAITEE'
WHERE numero_cde = commande.numero_cde;
END LOOP;
COMMIT;
END;
/
Explication : Ici, le curseur cur_commandes récupère les commandes sans date d’envoi (date_envoi IS NULL). Pour chaque commande, la boucle FOR met à jour la date d’envoi avec la date actuelle et modifie l’état de la commande à « TRAITEE ».
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 déclarer un curseur en PL/SQL ?
Comment utiliser une boucle FOR avec un curseur en PL/SQL ?
Comment passer un paramètre à un curseur en PL/SQL ?
Comment mettre à jour les lignes à l'aide d'un curseur en PL/SQL ?
Quel est l'objectif des exercices pratiques en PL/SQL ?
Conclusion
En maîtrisant les curseurs PL/SQL, vous pouvez gérer efficacement les ensembles de données. Quels autres aspects de PL/SQL souhaitez-vous explorer pour approfondir vos compétences ?