0% ont trouvé ce document utile (0 vote)
39 vues13 pages

Cours PLSQL Partie 2

Le document décrit ce qu'est un curseur dans Oracle et comment les utiliser. Il existe deux types de curseurs, explicites et implicites. Le document explique comment déclarer, ouvrir, manipuler, fermer et gérer automatiquement les curseurs explicites.

Transféré par

enimssay1230
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
39 vues13 pages

Cours PLSQL Partie 2

Le document décrit ce qu'est un curseur dans Oracle et comment les utiliser. Il existe deux types de curseurs, explicites et implicites. Le document explique comment déclarer, ouvrir, manipuler, fermer et gérer automatiquement les curseurs explicites.

Transféré par

enimssay1230
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

4

Les curseurs
Qu’est ce qu’un curseur?

Comme cité précédemment, le SGBD Oracle utilise des zones mémoires


dédiées au traitement et l’exécution des requêtes SQL.

Ces zones mémoire de taille fixe contenant le résultat de requêtes SQL


sont utilisées pour interpréter et analyser les ordres SQL.

Le curseur (Cursor) permet de nommer ces zones appelées aussi zone de


contexte pour pouvoir accéder aux données résultantes et les traiter ainsi
ligne par ligne.

Plus précisément, un curseur permet de "récupérer" un ensemble de


tuples, résultat d'une requête d'interrogation sur la base de données et de
les manipuler d’une manière procédurale, en balayant un par un les
tuples/enregistrements.
Les types de curseurs

Il existe deux types de curseurs:

• Curseurs explicites: sont créés au cas ou le développeur a besoin de


traiter ligne par ligne le résultat des requêtes ayant un résultat sur
plusieurs lignes

• Curseurs Implicites : ce type de curseurs est créé implicitement par


le SGBD Oracle pour les autres cas, chaque ordre Sql (INSERT, DELETE
et UPDATE) et pour chaque requête SELECT qui ne ramène qu’une
seule ligne.
• N.B: Si on utilise la clause bulk collect avec l’ordre sql select into, un
cureur est créé implicitement ( même si le résultat est sur plusieurs
lignes). Ceci dans le but d’optimiser le traitement.
Utilisation d’un curseur explicite

L’utilisation d’un curseur passe par quatre étapes:

1. Déclaration (DECLARE): Pour pouvoir manipuler un curseur explicite


il faut tout d’abord le déclarer à l’aide de la méthode DECLARE.
2. Ouverture (OPEN): Pour pouvoir travailler avec ce type de curseur il
faut l’ouvrir en utilisant la méthode OPEN.
3. Traitement (FETCH): On peut manipuler les données contenant dans
un curseur en utilisant la méthode FETCH
4. Fermeture (CLOSE): Après avoir fini le traitement des données
contenu dans le curseur on peut le fermer explicitement à l’aide de la
méthode CLOSE.
Déclaration d’un curseur

La déclaration d’un curseur permet de le nommer et de lui associer ainsi le


résultat d’une requête SELECT. Il est définit dans la partie DECLARE d’un
bloc Pl/Sql en suivant la syntaxe suivante:

CURSOR <nom_curseur> [ ( <nom_parametre> TYPE := <valeur_par_défaut> [ , . . . ])] IS


<requête_Select_SQL>;

Exemple:

Curseur simple sans arguments:

CURSOR cur_clients IS select * from clients;

Curseur avec arguments

CURSOR cur_clients (var_ville [Link]%type) IS select * from clients where ville=var_ville;


Ouverture d’un curseur

L’ouverture du curseur permet d’exécuter l’ordre SQL associé à ce


dernier et d’allouer ainsi la zone mémoire nécessaire. Elle est faite dans la
partie BEGIN d’un bloc Pl/Sql en suivant la syntaxe suivante:

OPEN <nom_curseur> [ ( <parametre_entrée> [ , . . . ] ) ];

Exemple:

DECLARE

CURSOR cur_clients (var_ville [Link]%type) IS select * from clients where ville=var_ville

BEGIN

OPEN cur_clients (var_ville =>’TETOUAN’);



END;/
L’ordre des paramètres d’un curseur

Il existe deux types d’affectation de valeur aux paramètres:

1. Affectation par position: le paramètre effectif est substitué par la


valeur formelle
2. Affectation par nom: le paramètre actuel est substitué par la valeur
formelle à l'aide du symbole de flèche (=>)

L’ordre spécifié dans la déclaration des paramètres de curseur doit être


respecté lors de l’ouverture du curseur.

On peut mélanger les deux types d’affectation; cependant, la notation de


position doit précéder la notation nommée.

Exemple:
Manipulation d’un curseur

Pour pouvoir manipuler les données extraites de l’exécution de la


requête, on utilise la méthode FETCH INTO qui permet de traiter une seule
ligne à la fois en suivant la syntaxe ci-dessous:

FETCH <nom_curseur> INTO { <nom_variable> | <nom_enregistrement> [ , . . . ] };


nom_variable correspond à une seule colonne et nom_enregistrement corresponds à toute la
ligne
Pour pouvoir récupérer toutes les lignes du curseur à la fois on peut
utiliser la méthode FETCH BULK COLLECT INTO en suivant la syntaxe ci-
dessous:

FETCH <nom_curseur> BULK COLLECT INTO <variable_enregistrement>;


variable_enregistrement corresponds à une table d’enregistrement.

Exemple:
Exemple
Etat d’un curseur

Pour pouvoir obtenir des informations sur les curseurs, il existe


quelques attributs propres à ces dernier:

• %ISOPEN: est un attribut de type booléen qui renvoie la valeur true si


le curseur est ouvert.
• %FOUND: est un attribut de type booléen qui renvoie la valeur true
tant que le FETCH ramène des lignes.
• %NOTFOUND: est un attribut de type booléen qui renvoie la valeur true
si le dernier FETCH n’a ramené aucune ligne.
• %ROWCOUNT: : est un attribut de type numérique qui renvoie le
nombre total ramenés jusqu’à présent.

Ces attributs sont conservés par Pl/Sql après l'exécution du curseur.


Fermeture d’un curseur

Après le traitement de données et pour pouvoir libérer l’espace


mémoire alloué au curseur il faut le fermer explicitement. Elle est faite
dans la partie BEGIN d’un bloc Pl/Sql en suivant la syntaxe suivante:

Close <nom_curseur>;

Exemple:
DECLARE

CURSOR cur_clients (var_ville [Link]%type IS select * from clients where ville=var_ville;


BEGIN
OPEN cur_clients;
… Traitemet des lignes de données….
Close cur_clients;
END;/
Gestion automatique d’un curseur

L’utilisation explicite d’un curseur peut se faire automatiquement par le


système via la boucle FOR et suivant la syntaxe ci-dessous:

FOR <nom_variable> IN <nom_curseur>


LOOP <liste_instructions> END LOOP ;

Pour ce cas de gestion automatique :


• L'ouverture et la fermeture du curseur sont implicites et il est
interdit de faire appel aux méthode OPEN et CLOSE.
• Les ordres FETCH sont inutiles
• les données manipulées sont référencées par :
<nom_variable>.<nom_attribut>
Exemple:
Exemple

Vous aimerez peut-être aussi