les curseurs en pl/sql

les curseurs en pl/sql

sommaire :

  1. Les types de curseurs
  2. Déclaration d'un curseur
  3. Utilisation d'un curseur
 

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

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

Note de l'article




1 Star2 Stars3 Stars4 Stars5 Stars (5 votes, moyenne: 4,40 max : 5)
Loading ... Loading ...

  1. Yassine OURAHMA Says:

    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.

  2. issiga diallo Says:

    Salut,
    Je viens juste de trouver la solution a mon probleme.
    Il est magnifique ce tutorielle.

    Suis debutant en PL/SQL

Donner votre avis :