Curseurs PL/SQL
Définition : Curseur
Un curseur est un pointeur sur un résultat de requête.
Syntaxe : Syntaxe OPEN/FETCH
CTRL+C pour copier, CTRL+V pour coller
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;
DECLARE CURSOR c_moncurseur IS SELECT prop1, prop2, ... FROM relations; vProp1 relation1.prop1%TYPE; vProp2 ... BEGIN OPEN c_moncurseur; LOOP FETCH c_moncurseur INTO vProp1, vProp2, ...; EXIT WHEN c_moncurseur%NOTFOUND; instructions END LOOP; END;
Rappel : BD "Gestion des intervenants" : Schéma relationnel
CTRL+C pour copier, CTRL+V pour coller
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)
tIntervenant (#pknom:varchar, prenom:varchar, poste:integer) 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
CTRL+C pour copier, CTRL+V pour coller
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
/
CREATE OR REPLACE PROCEDURE pAfficheIntervenants IS CURSOR cIntervenants IS SELECT pknom, prenom FROM tIntervenant; vNom tIntervenant.pknom%TYPE; vPrenom tIntervenant.prenom%TYPE; BEGIN DBMS_OUTPUT.PUT_LINE('** Liste des intervenants **'); OPEN cIntervenants; LOOP FETCH cIntervenants INTO vNom, vPrenom; EXIT WHEN cIntervenants%NOTFOUND; DBMS_OUTPUT.PUT_LINE('-' || INITCAP(TRIM(vPrenom)) || ' ' || INITCAP(TRIM(vNom))); END LOOP; END; / SET SERVEROUTPUT ON; BEGIN pAfficheIntervenants1; END; /
Complément : Syntaxe FOR/IN
CTRL+C pour copier, CTRL+V pour coller
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;
DECLARE CURSOR c_moncurseur IS SELECT prop1, prop2, ... FROM relations; BEGIN FOR c_montuple IN c_moncurseur LOOP instructions END LOOP; END;
CTRL+C pour copier, CTRL+V pour coller
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
/
CREATE OR REPLACE PROCEDURE pAfficheIntervenants2 IS CURSOR cIntervenants IS SELECT pknom, prenom FROM tIntervenant; BEGIN DBMS_OUTPUT.PUT_LINE('** Liste des intervenants **'); FOR i IN cIntervenants LOOP DBMS_OUTPUT.PUT_LINE('-' || INITCAP(TRIM(i.prenom)) || ' ' || INITCAP(TRIM(i.pknom))); END LOOP; END; /