Vous êtes sur la page 1sur 4

Bachtarzi C.

Cours : Oracle II
Filière : SITW Niveau : 3ème année
LES CURSEURS

ORACLE utilise des structures dynamiques qui en fait sont des espaces de travail (réservés à
SQL) où sont exécutées les instructions SQL et où sont stockés les données et les résultats
nécessaires.
Les curseurs PL/SQL permettent de nommer ces espaces afin d’accéder aux informations
qu’ils contiennent.

Ces curseurs sont de 2 types :


 Curseur implicite : créé automatiquement pour chaque instruction de manipulation des
données (INSERT, UPDATE, DELETE et SELECT) y compris celles ne renvoyant
qu’une seule ligne.

 Curseur explicite : déclaré explicitement par le programmeur pour les instructions


renvoyant plusieurs lignes afin de traiter les lignes individuellement.

Ensemble actif: c’est l’ensemble des lignes renvoyées par une instruction.

Curseur
1842 KARIM directeur
2623 FAHD gestionnaire
5600 FAIZA secrétaire
Les étapes de la vie d’un curseur :
- Déclaration du curseur.
- Ouverture du curseur.
- Traitement des lignes.
- Fermeture du curseur.

non

ouverture traitement oui fermeture


déclaration du des vide ? du
curseur lignes curseur

Contrôle des curseurs explicites :

1. Ouvrir le curseur 2. Extraire 1 ligne à 3. Fermer le curseur


L’aide du curseur

Pointeur de curseur Point Point

1
Bachtarzi C. Cours : Oracle II
Filière : SITW Niveau : 3ème année
 Déclaration :
CURSOR nom-curseur IS instruction SELECT……. ;

- Instruction SELECT sans clause INTO


- Nom-curseur : identificateur PL/SQL
- Si on a besoin d’un ordre précis de traitement des lignes, utiliser la clause ORDER
BY.

 Ouverture du curseur : dans la section exécutable.


OPEN nom-curseur ;

L’instruction OPEN :
- Exécute l’interrogation associée au curseur.
- Identifie l’ensemble actif (ensemble des résultats).
- Positionne le pointeur avant la première ligne.

 Si l’interrogation ne renvoie aucune ligne, lorsque le curseur est ouvert, PL/SQL ne


déclenche pas d’exceptions.
 Il est possible de tester l’état du curseur après une extraction en utilisant l’attribut du
curseur SQL %ROWCOUNT.

 Traitement des lignes :


FETCH nom-curseur INTO [var1, var2, ….] / nom-enreg;

L’instruction FETCH permet de récupérer les lignes de l’ensemble actif (une à la fois) dans
des variables PL/SQL pour un éventuel traitement, puis elle avance le pointeur vers la ligne
suivante.

Remarque :
- Même nb de variables dans la clause INTO que de colonnes.
- Ajuster la position des variables par rapport aux colonnes.
- pour récupérer toutes les lignes, insérer l’instruction FETCH dans une boucle.

 Fermeture du curseur ;
CLOSE nom-curseur ;

- Il faut prendre l’habitude de fermer les curseurs afin de libérer les ressources.
- Ne pas essayer d’extraire de données d’un curseur s’il est fermé, sinon
l’exception INVALID_CURSOR se déclenchera.

Attributs d’un curseur explicite :


Ce sont des informations qui nous renseignent sur l’état du curseur.

Attribut Type Description


%ROWCOUNT nombre Indique le nombre de lignes traitées.
%NOTFOUND booléen Prend la valeur TRUE si aucune ligne n’est lue.
%FOUND ″ Prend la valeur TRUE si une ligne est extraite.
%ISOPEN ″ Prend la valeur TRUE si le curseur est ouvert.

2
Bachtarzi C. Cours : Oracle II
Filière : SITW Niveau : 3ème année
Quelques exemples d’utilisations possibles:
%ISOPEN: Utilisé pour vérifier si le curseur est ouvert avant l’extraction.

Exemple:
IF NOT nom-curseur %ISOPEN THEN IF NOT curs_emp %ISOPEN THEN
OPEN nom-curseur; OPEN curs_emp;
END IF; END IF; LOOP FETCH curs_emp….

Ces attributs peuvent servir à déterminer les critères de sortie d’une boucle.

%ROWCOUNT : Après ouverture du curseur, %rowcount prend la valeur 0. Par la suite il


renvoie le nb de lignes extraites jusqu’à présent.
Si le curseur est fermé, le fait de référencer avec %rowcount déclenche l’exception
invalid_cursor.

Peut être utilisé pour :


- Extraire un nb exact de lignes.
- Extraire les lignes d’une boucle FOR.

LOOP
FETCH curs1 INTO v_num, v_nom;
IF curs1%ROWCOUNT < 10 THEN
instructions;
END IF;

%NOTFOUND : Utilisé pour sortir d’une boucle lorsque FETCH ne peut renvoyer de lignes.
- Avant la 1ère extraction, valeur NULL.
- FALSE si la dernière extraction a renvoyé une ligne.
- TRUE dans le cas contraire.

LOOP
FETCH curs1 INTO v_num, v_nom; (SI fetch ne s’exécute pas, %notfound =null
EXIT WHEN curs1%NOTFOUND;  boucle infinie
Ou bien curs1%NOTFOUND = NULL
END LOOP;

Curseurs et enregistrements :

Traiter les lignes de l’ensemble actif en extrayant les valeurs pour les placer dans un
enregistrement.

- Définir un enregistrement en fonction de la liste précise des colonnes du curseur.


- Placer le résultat de l’extraction dans l’enregistrement.

Les curseurs paramétrés :

Objectifs :
- Transmettre des paramètres au curseur au moment de son ouverture et de l’exécution
de l’interrogation.

3
Bachtarzi C. Cours : Oracle II
Filière : SITW Niveau : 3ème année
- Ouvrir un curseur explicite à plusieurs reprises, en renvoyant un ensemble actif
différent à chaque fois.

Syntaxe de déclaration :
CURSOR nom-curseur [(nom-paramètre type,….)]
IS instruction SELECT ;
Ouverture :
OPEN nom_curseur (val1, val2, …..) ;

Ce concept est utilisé pour référencer un même curseur plusieurs fois. A chaque exécution, le
curseur est fermé puis rouvert avec un nouvel ensemble de paramètres.
Chaque paramètre formel dans la déclaration doit avoir un paramètre réel correspondant dans
l’instruction OPEN.

Vous aimerez peut-être aussi