154
Chapitre 6 • SQL avancé
curseur (declare cursor). Le résultat de l'exécution de cette requête peut
être considéré comme un fichier. Pour accéder à ses enregistrements (les lignes), il faut ouvrir ce fichier, demander chaque ligne jusqu'à la dernière, puis
fermer le fichier. Le curseur, qui porte un nom qui l'identifie, est associé à ce
fichier résultat, et plus particulièrement à une ligne de celui-ci. Ce fichier n'a
pas nécessairement d'existence matérielle. La commande de définition declare cursor est essentiellement déclarative; elle n'entraîne pas l'exécution
de la requête.
2. L'ouverture du fichier résultat (open) provoque l'évaluation de la requête à
partir des valeurs courantes des paramètres et le positionnement du curseur sur
la première ligne, si elle existe.
3. Si le curseur référence une ligne, la demande d'accès (fetch) fournit cette ligne au programme tandis que le curseur est avancé d'une position.
4. Un indicateur de diagnostic (SQLCODE) précise à l'issue de chaque exécution
d'une commande la manière dont celle-ci s'est déroulée. A titre d'exemple,
SQLCODE = 0 indique que l'opération s'est déroulée correctement, et SQLCODE
= 100 indique notamment qu'aucune ligne n'a été trouvée (fin de fichier).
5. La fermeture du fichier résultat (close) entraîne l'abandon du fichier résultat.
Toute ouverture ultérieure provoquera à nouveau l'évaluation de la requête.
Entre une fermeture et une ouverture, on peut donc modifier des valeurs de
paramètres de la requête.
6. Dans une commande d'accès il faut préciser les variables dans lesquelles le
SGBD rangera les valeurs de la ligne obtenue.
7. La définition d'une requête SQL peut contenir des noms de variables en lieu et
place des constantes dans la condition de sélection.
L'exemple suivant extrait et traite les informations relatives aux clients de Toulouse.
...
exec SQL declare CURCLI cursor for
select NCLI, NOM, ADRESSE
from
CLIENT
where LOCALITE = :LOC
end-exec;
...
LOC := 'Toulouse';
exec SQL open CURCLI end-exec;
exec SQL fetch CURCLI into :NUM,:NOM,:ADR end-exec;
while SQLCODE = 0 do

exec SQL fetch CURCLI into :NUM,:NOM,:ADR end-exec;
endwhile;
exec SQL close CURCLI end-exec;
...
b) Modification des données
Les commandes insert, delete, et update peuvent, elles-aussi, apparaître dans
un programme, selon les conventions syntaxiques spécifiées ci-dessus. Les valeurs
Précédent

- 154/436

Suivant