Gérer efficacement les curseurs explicites en PL/SQL peut s’avérer complexe sans une bonne compréhension des attributs associés.
Une mauvaise gestion des curseurs peut entraîner des erreurs de runtime, compromettant la fiabilité et l’efficacité de vos applications.
Cet article vous guide à travers l’utilisation des attributs %FOUND, %NOTFOUND, %ISOPEN et %ROWCOUNT pour une gestion optimale des curseurs en PL/SQL.
Maîtriser le langage SQL en environnement SGBDR. SQL n'aura plus de secrets pour vous !
Dans cette section, nous examinons l’état des curseurs explicites en PL/SQL. Les curseurs sont des pointeurs qui permettent de naviguer à travers les résultats d’une requête SQL. Nous allons explorer les attributs suivants :
- %FOUND :Renvoie TRUE si le dernier fetch a réussi.
- %NOTFOUND :Renvoie TRUE si le dernier fetch n’a pas trouvé de ligne.
- %ISOPEN :Renvoie TRUE si le curseur est ouvert.
- %ROWCOUNT :Renvoie le nombre de lignes récupérées par le curseur.
Et voici un schéma qui illustre le fonctionnement de chaque attribut :
Nous allons également présenter plusieurs exemples illustrant l’utilisation de ces attributs.
État des curseurs explicites PL/SQL
DECLARE
CURSOR cur_salaries IS SELECT * FROM salaries;
BEGIN
OPEN cur_salaries;
IF cur_salaries%ISOPEN THEN
DBMS_OUTPUT.PUT_LINE('Curseur ouvert.');
ELSE
DBMS_OUTPUT.PUT_LINE('Curseur fermé.');
END IF;
END;
/
Explication : Dans cet exemple, nous ouvrons un curseur nommé cur_salaries et vérifions son état à l’aide de l’attribut %ISOPEN. La sortie affichera « Curseur ouvert. » si le curseur est effectivement ouvert.
Et voici son résultat lors de son exécution :
- Vérification de l’existence d’une ligne
DECLARE
CURSOR cur_salaries(nom salaries.nom_sal%TYPE := 'Andrieu') IS
SELECT nom_sal, prenom_sal FROM salaries WHERE nom_sal = nom;
BEGIN
OPEN cur_salaries;
IF cur_salaries%NOTFOUND THEN
DBMS_OUTPUT.PUT_LINE('Exécution de cur_salaries : Erreur');
ELSE
DBMS_OUTPUT.PUT_LINE('Exécution de cur_salaries : OK');
END IF;
END;
/
Explication : Ici, nous ouvrons un curseur qui cherche le salarié « Andrieu ». Si aucune ligne n’est trouvée, %NOTFOUND renverra TRUE, et le message « Exécution de cur_salaries : Erreur » sera affiché. Sinon, le message indiquera que l’exécution est réussie.
Et voici son résultat lors de son exécution :
Utilisation de %ROWCOUNT PL/SQL
DECLARE
CURSOR cur_clients IS SELECT * FROM clients;
var_clients cur_clients%ROWTYPE;
BEGIN
OPEN cur_clients;
DBMS_OUTPUT.PUT_LINE('Valeur de %ROWCOUNT : ' || cur_clients%ROWCOUNT);
LOOP
FETCH cur_clients INTO var_clients;
EXIT WHEN cur_clients%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(var_clients.nom || ' ' || 'Valeur de %ROWCOUNT : ' || cur_clients%ROWCOUNT);
END LOOP;
CLOSE cur_clients;
END;
/
Explication : Ce bloc ouvre un curseur pour la table clients et affiche le nombre de lignes récupérées avec %ROWCOUNT avant de commencer à itérer sur les résultats. La valeur de %ROWCOUNT est affichée pour chaque client, indiquant le nombre total de lignes traitées jusqu’à présent.
Et voici son résultat lors de son exécution :
Vérifier %FOUND après un fetch
DECLARE
CURSOR cur_clients IS SELECT * FROM clients;
var_clients cur_clients%ROWTYPE;
BEGIN
OPEN cur_clients;
FETCH cur_clients INTO var_clients;
IF cur_clients%FOUND THEN
DBMS_OUTPUT.PUT_LINE('Exécution ok');
END IF;
CLOSE cur_clients;
END;
/
Explication : Dans cet exemple, nous ouvrons un curseur, récupérons une ligne dans var_clients, et vérifions si une ligne a été trouvée avec %FOUND. Si une ligne est trouvée, le message « Exécution ok » sera affiché.
Et voici son résultat lors de son exécution :
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 vérifier si un curseur PL/SQL est ouvert ?
Comment savoir si une ligne a été trouvée avec un curseur PL/SQL ?
Comment gérer le cas où aucune ligne n'est trouvée par un curseur PL/SQL ?
Comment utiliser %ROWCOUNT pour obtenir le nombre de lignes récupérées ?
Pourquoi est-il important de vérifier l'état d'un curseur avant de le manipuler ?
Conclusion
En maîtrisant les attributs des curseurs explicites en PL/SQL, vous améliorez la robustesse de vos scripts. Quelle autre fonctionnalité de PL/SQL vous intrigue et aimeriez-vous explorer davantage ?