Oracle - Le langage PL/SQL

Consultation d'une table en PL :utilisation simple des curseurs

Les curseurs sont des zones tampon utilisés pour tout SELECT multiligne.
A chaque ordre SELECT on associe un curseur nommé et on y fait référence dans la suite du programme pour traiter les lignes les unes après les autres jusqu'à la fin de la table.

On peut utiliser des types de variables prédéfinis et des attributs de curseur prédéfinis pour faciliter le codage :

types de variables prédéfinis utiles

type prédéfini Signification Exemple
%ROWTYPE le type enregistrement d'une table DECLARE ligne fournisseur%ROWTYPE (fournisseur est un nom de table...)
%TYPE le type d'une colonne DECLARE v_nom nom_fournisseur%TYPE (nom_fournisseur est une colonne de la table fournisseur...)

attributs de curseurs prédéfinis utiles

Attribut TYPE Signification
SQL%NOTFOUND booléen renvoie TRUE lorsque l'ordre SQL précédent n'a affecté aucune ligne.
SQL%ROWCOUNT entier renvoie le nombre de lignes traitées par l'ordre SQL précédent.
SQL%FOUND booléen négation logique de SQL%NOTFOUND, donc vrai dès qu'une ligne a été affectée par l'ordre SQL.
SQL%ISOPEN booléen vrai si curseur ouvert

Les différentes étapes nécessaires sont les suivantes :
- déclaration, où l'on associe, dans la zone de déclaration un curseur avec un ordre SQL (CURSOR nom_curseur IS ordre_select)
- ouverture du curseur, où l'on analyse l'ordre et l'on identifie les lignes candidates (OPEN nom_curseur )
- rapatriement des valeurs dans les variables de réception ( FETCH nom_curseur INTO liste_variables )
- fermeture du curseur, ( CLOSE nom_curseur )

Exemple : 
SQL>   
DECLARE 
   nom_fournisseur fournisseur.nom%TYPE; 
   ca_fournisseur fournisseur.ca%TYPE; 
   CURSOR C1 IS SELECT    nom,ca FROM fournisseur; 
   BEGIN 
   OPEN C1; 
   LOOP 
   	FETCH C1 INTO nom_fournisseur, ca_fournisseur; 
   	EXIT WHEN C1%NOTFOUND; 
   	dbms_output.put_line( nom_fournisseur||' '||ca_fournisseur);
   END LOOP; 
   CLOSE C1; 
   END; 
   .
SQL> SET SERVEROUTPUT ON
SQL> R
DiDier 1000
Daredevil 2000

Procedure PL/SQL terminee avec succes.
SQL> 

(c) 2002- 2006 Didier Deléglise


modifié
le 20/11/2006

Ecrire a DD
ecris
moi


les forums techniques Oracle

mon BLOG Oracle,
en Francais
connaitre DD
l'autre vie
de DD

mon CV

trucs
et astuces

JOBs Oracle
du jour
Homepage "Tout sur Oracle"
Mon site :
Tout sur Oracle (et le web)
Copyright (C) 2002
Utilisation de ces documents