Les curseurs

Les curseurs

Un curseur est un pointeur vers une zone mémoire SQL privée allouée (dans la mêmoire PGA) pour le traitement d’une instruction SQL . Le curseur permet de traiter un à un les enregistrements (lignes de tables) ramenés par l’instruction SQL en question.
Deux types de curseurs peuvent être distingués :
  1. Curseur implicite : lorsqu’un utilisateur lance une commande SQL , Oracle génère un curseur pour le traitement de cette commande. Ce curseur créé et géré par Oracle est dit curseur implicite.
  2. Curseur explicite : si vous souhaitez gérer une commande SQL au sein de votre code PL/SQL, vous pouvez créer explicitement un curseur pour traiter une à une les lignes ramenées par la commande.
Voici un exemple :
DECLARE
nom emp.ename%TYPE;
salaire emp.sal%TYPE;
CURSOR C1 IS SELECT ename, NVL(sal,0) FROM emp;
BEGIN
OPEN C1;
LOOP
FETCH C1 INTO nom, salaire;
EXIT WHEN C1%NOTFOUND;
DBMS_OUTPUT.PUT_LINE ( nom||' gagne '||salaire || ' dollars');
END LOOP;
CLOSE C1;
END;
Explications :
CURSOR C1: permet de déclarer un curseur portant le nom C1
nom emp.ename%TYPE signifie que la variable nom est de même type que la colonne ename de la table emp (Un autre type prédéfini %ROWTYPE peut être utilisé pour déclarer une variable de type enregistrement de même type que l’enregistrement d'une table)
Open C1 : ouvre le curseur
Fetch : ramène l’enregistrement courant et le charge dans les variables nom et salaire et puis avance le pointeur vers l’enregistrement suivant
C1%NOTFOUND : renvoie VRAI si le curseur pointe au delà du dernier enregistrement. D’autres attributs du curseur peuvent être utilisé :
  • %FOUND,
  • %ROWCOUNT qui renvoie le nombre de lignes ramenées par l’ordre SQL du curseur,
  • %ISOPEN qui renvoie vrai si le curseur est ouvert.
Close C1 : permet de fermer le curseur et libérer les ressources.

Enregistrer un commentaire

0 Commentaires