les curseurs en pl/sql
Un des plus grandes forces du langage pl/sql, c’est bien les curseurs. En effet il permet de récupérer et de traiter le données de la base d’oracle ligne par ligne.
Les types de curseurs
· Le curseur explicite
Le curseur explicite est géré pas l’utilisateur (sur un SELECT).
· Le curseur implicite
Le curseur implicite est généré et géré par le noyau.
l’utilisation du curseur pl/sql
On peut diviser le vie d’un curseur en 4 parties
- déclaration (DECLARE)
- ouverture (OPEN)
- utilisation (FETCH)
- fermeture (CLOSE)
Déclaration d’un curseur
CURSOR nom_curseur IS ordre_select
Exemple:
DECLARE CURSOR cUtilisateur IS SELECT NOM, PRENOM FROM UTILISATEUR;
Ouverture d’un curseur
OPEN nom_curseur
L’ouverture du curseur engendre l’exécution de la requête.
Il faut savoir aussi que le curseur se place automatiquement à la première ligne du tableau.

exemple-curseur-pl-sql
Dans cet illustration on voit que le curseur est positionné dans le premier enregistrement qui est « dupond jean ».
Voici comment on ouvre un curseur en pl/sql :
DECLARE CURSOR cUtilisateur IS SELECT NOM, PRENOM FROM UTILISATEUR; BEGIN OPEN cUtilisateur; ... CLOSE cUtilisateur; END; /
Fetch
La commande Fetch permet de lire la ligne en cours (la ligne ou est positionné le curseur).
Après la lecture de la ligne, il positionne automatiquement le curseur à la ligne suivante.
Attention, si le curseur est en fin de tableau, la commande Fetch ne quitte pas automatiquement le tableau,
il reste « bloqué » sur le dernier enregistrement.
Voici la syntaxe :
Pour parcourir un tableau il faut ainsi utiliser une boucle sur la commande fetch
FETCH nom_curseur INTO ligne_tableau;
ligne_tableau doit être une variable dynamique à partir du curseur:
voici la syntaxe :
ligne_tableau nom_curseur%ROWTYPE;
DECLARE CURSOR cUtilisateur IS SELECT NOM, PRENOM FROM UTILISATEUR; lUtilisateur cUtilisateur%ROWTYPE; BEGIN OPEN cUtilisateur; LOOP FETCH cUtilisateur INTO lUtilisateur; EXIT WHEN cUtilisateur%NOTFOUND; DBMS_OUTPUT.PUT_LINE( lUtilisateur.NAME ) ; END LOOP; CLOSE cUtilisateur; END; /
Attributs
On peux vérifier l’état d’un curseur grasse à ces attributs :
%FOUND
vérifie si le fetch renvoi bien une ligne
%NOTFOUND
vérifie si le fetch ne renvoi aucune une ligne
%ROWCOUNT
compte le nombre de ligne que le curseur à lu
%ISOPEN
vérifie si le curseur est ouvert


(5 votes, moyenne: 4,40 max : 5)
juin 2nd, 2010 at 17 h 30 min
Bonjour,
Votre tutoriel est super.
Une seule remarque :
faudrait’il faire
DBMS_OUTPUT.PUT_LINE( lUtilisateur.NOM ) ;
au lieu de
DBMS_OUTPUT.PUT_LINE( lUtilisateur.NAME ) ;
Je suppose que cette une faute de frappe (rien de méchant)
Cordialment.
juillet 16th, 2010 at 13 h 04 min
Salut,
Je viens juste de trouver la solution a mon probleme.
Il est magnifique ce tutorielle.
Suis debutant en PL/SQL