Curseurs PL/SQL

DéfinitionCurseur

Un curseur est un pointeur sur un résultat de requête.

SyntaxeSyntaxe 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;

RappelBD "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)

ExempleBD "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émentSyntaxe 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
/