Partie II
Programmation procédurale
244
© Éditions Eyrolles
Restrictions
Les restrictions que nous mentionnons ici s’appliquent également aux déclencheurs (étudiés
en fin de ce chapitre). Bien qu’il existe des restrictions qui s’appliquent seulement aux fonctions et aux déclencheurs, elles peuvent s’appliquer à une procédure si cette dernière est appelée dans le code de la fonction ou du déclencheur.
• Les instructions suivantes ne peuvent être présentes dans un sous-programme CHECK
TABLES, LOCK TABLES, UNLOCK TABLES, LOAD DATA, LOAD TABLE et OPTIMIZE TABLE.
• Il n’est pas possible de programmer des instructions SQL en dynamique (PREPARE, EXECUTE, DEALLOCATE PREPARE) dans un déclencheur (possible dans une fonction ou une
procédure).
• Il n’y a pas encore d’outil de débogage pour les sous-programmes.
• Les instructions CALL ne peuvent être préparées à l’avance (CALL variable).
• MySQL ne prend pas encore en charge la notion de paquetage (package) qui est un module
regroupant plusieurs objets (variables, exceptions, curseurs, fonctions ou procédures) fournissant un ensemble de services (un peu comme une classe dans l’approche objet).
Curseurs
Les curseurs sont très utilisés, pour ne pas dire qu’ils sont omniprésents, dans toute application
importante. Le concept, analogue au niveau de JDBC, est programmé à l’aide de la classe
Resultset, et, sous ASP de Microsoft, à l’aide de la classe RecordSet (appelée DataSet
avec .Net).
MySQL n’est compatible qu’avec des curseurs en lecture seulement, non navigables, non
modifiables et non dynamiques.
Généralités
Un curseur est une zone mémoire qui est générée côté serveur (mise en cache) et qui permet de
traiter individuellement chaque ligne renvoyée par un SELECT. Un sous-programme peut
travailler avec plusieurs curseurs en même temps. Un curseur, durant son existence (de
l’ouverture à la fermeture), contient en permanence l’adresse de la ligne courante.
La figure suivante illustre la manipulation de base d’un curseur. Le curseur est décrit après les
variables. Il est ouvert dans le code du programme ; il s’évalue alors et va se charger en
extrayant les données de la base. Le programme peut parcourir tout le curseur en récupérant
les lignes une par une dans une variable locale. Le curseur est ensuite fermé.
Les curseurs doivent être déclarés après les variables et avant les exceptions.
Programmation procédurale
244
© Éditions Eyrolles
Restrictions
Les restrictions que nous mentionnons ici s’appliquent également aux déclencheurs (étudiés
en fin de ce chapitre). Bien qu’il existe des restrictions qui s’appliquent seulement aux fonctions et aux déclencheurs, elles peuvent s’appliquer à une procédure si cette dernière est appelée dans le code de la fonction ou du déclencheur.
• Les instructions suivantes ne peuvent être présentes dans un sous-programme CHECK
TABLES, LOCK TABLES, UNLOCK TABLES, LOAD DATA, LOAD TABLE et OPTIMIZE TABLE.
• Il n’est pas possible de programmer des instructions SQL en dynamique (PREPARE, EXECUTE, DEALLOCATE PREPARE) dans un déclencheur (possible dans une fonction ou une
procédure).
• Il n’y a pas encore d’outil de débogage pour les sous-programmes.
• Les instructions CALL ne peuvent être préparées à l’avance (CALL variable).
• MySQL ne prend pas encore en charge la notion de paquetage (package) qui est un module
regroupant plusieurs objets (variables, exceptions, curseurs, fonctions ou procédures) fournissant un ensemble de services (un peu comme une classe dans l’approche objet).
Curseurs
Les curseurs sont très utilisés, pour ne pas dire qu’ils sont omniprésents, dans toute application
importante. Le concept, analogue au niveau de JDBC, est programmé à l’aide de la classe
Resultset, et, sous ASP de Microsoft, à l’aide de la classe RecordSet (appelée DataSet
avec .Net).
MySQL n’est compatible qu’avec des curseurs en lecture seulement, non navigables, non
modifiables et non dynamiques.
Généralités
Un curseur est une zone mémoire qui est générée côté serveur (mise en cache) et qui permet de
traiter individuellement chaque ligne renvoyée par un SELECT. Un sous-programme peut
travailler avec plusieurs curseurs en même temps. Un curseur, durant son existence (de
l’ouverture à la fermeture), contient en permanence l’adresse de la ligne courante.
La figure suivante illustre la manipulation de base d’un curseur. Le curseur est décrit après les
variables. Il est ouvert dans le code du programme ; il s’évalue alors et va se charger en
extrayant les données de la base. Le programme peut parcourir tout le curseur en récupérant
les lignes une par une dans une variable locale. Le curseur est ensuite fermé.
Les curseurs doivent être déclarés après les variables et avant les exceptions.
