Curseurs PL/SQL
Définition : Curseur
Un curseur est un pointeur sur un résultat de requête.
Syntaxe : Syntaxe OPEN/FETCH
1
DECLARE
2
CURSOR c_moncurseur IS
3
SELECT prop1, prop2, ... FROM relations;
4
vProp1 relation1.prop1%TYPE;
5
vProp2 ...
6
BEGIN
7
OPEN c_moncurseur;
8
LOOP
9
FETCH c_moncurseur INTO vProp1, vProp2, ...;
10
EXIT WHEN c_moncurseur%NOTFOUND;
11
instructions
12
END LOOP;
13
END;
Rappel : BD "Gestion des intervenants" : Schéma relationnel
1
tIntervenant (#pknom:varchar, prenom:varchar, poste:integer)
2
tCours (#pkannee:2000..2100, #pknum:integer, titre:varchar, type:C|TD|TP, fkintervenant=>tIntervenant, debut:date)
Exemple : BD "Gestion des intervenants" : Traitement de données et curseur
1
CREATE OR REPLACE PROCEDURE pAfficheIntervenants
2
IS
3
CURSOR cIntervenants IS
4
SELECT pknom, prenom FROM tIntervenant;
5
vNom tIntervenant.pknom%TYPE;
6
vPrenom tIntervenant.prenom%TYPE;
7
BEGIN
8
DBMS_OUTPUT.PUT_LINE('** Liste des intervenants **');
9
OPEN cIntervenants;
10
LOOP
11
FETCH cIntervenants INTO vNom, vPrenom;
12
EXIT WHEN cIntervenants%NOTFOUND;
13
DBMS_OUTPUT.PUT_LINE('-' || INITCAP(TRIM(vPrenom)) || ' ' || INITCAP(TRIM(vNom)));
14
END LOOP;
15
END;
16
/
17
18
SET SERVEROUTPUT ON;
19
BEGIN
20
pAfficheIntervenants1;
21
END;
22
/
1
** Liste des intervenants **
2
-Stéphane Crozat
3
-Antoine Jouglet
Complément : Syntaxe FOR/IN
1
DECLARE
2
CURSOR c_moncurseur IS
3
SELECT prop1, prop2, ... FROM relations;
4
BEGIN
5
FOR c_montuple IN c_moncurseur LOOP
6
instructions
7
END LOOP;
8
END;
1
CREATE OR REPLACE PROCEDURE pAfficheIntervenants2
2
IS
3
CURSOR cIntervenants IS
4
SELECT pknom, prenom FROM tIntervenant;
5
BEGIN
6
DBMS_OUTPUT.PUT_LINE('** Liste des intervenants **');
7
FOR i IN cIntervenants LOOP
8
DBMS_OUTPUT.PUT_LINE('-' || INITCAP(TRIM(i.prenom)) || ' ' || INITCAP(TRIM(i.pknom)));
9
END LOOP;
10
END;
11
/