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 (12 votes, moyenne: 4,25 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

  3. Skulled Says:

    Très bon tutoriel, facile à comprendre pour les débutant :)

  4. Kouame Says:

    Bjr,
    J’ai un petit souci, je veux utiliser un curseur pour inserer les données d’une table ‘tab1′ dans une autre table ‘tab2′ vide de même structure que la première en ne prenant qu’une seule fois les personnes en double.
    exemple de table
    matricule Nom Prenom Telephone mail
    0001 Yao Koffi 01050214 yaokoff@yyy
    0002 Yao Koffi 08254789 koffyao@yyy
    0003 Abib Honore 45123642 abibhono@ppp
    0004 Kata Serge 78451201 kata@kkkk

  5. Manel Says:

    j’ai trouvé vtr resume de cours e superrrrrrrrr

  6. Kirbyx Says:

    Vraiment bien fait. Facile à comprendre pour les néophytes, merci!

Donner votre avis :