par Mike Cravitz - Mis en ligne le 15/05/2002
Comment extraire et traiter les définitions de colonnes d'une instruction Select inconnues
au moment de la compilation. Les curseurs de SQL permettent de
produire des tables de résultats à l'exécution
en utilisant toute la puissance
de l'instruction Select du langage SQL ...
SQL possède deux types de curseurs : statique et dynamique. On utilise l'un ou l'autre, de manière différente, selon qu'il est nécessaire, ou non, de différer la définition de certaines clauses de l'instruction Select jusqu'au moment de l'exécution. Dans un fichier Client, par exemple, on pourrait utiliser un curseur statique pour produire une table de résultats contenant tous les clients dont la dette dépasse un certain montant spécifié à l'exécution, ou tous les clients en ordre de dette décroissant. C'est là qu'intervient le curseur dynamique : il permet de retarder la logique de sélection et la séquence de données jusqu'au moment de l'exécution.
S'il faut retarder la détermination des définitions de colonnes jusqu'à l'exécution, on dispose de l'instruction SQL Describe. Dans cet article, je décris sept étapes permettant d'extraire et de traiter les lignes d'une instruction SQL Select lorsqu'on ne connaît pas les descriptions de colonnes au moment de la compilation. J'utilise pour cela un programme exemple appelé Describe, téléchargeable à http://www.iseriesnetwork. com/code. Avant de commencer,définissons quelques termes nécessaires pour suivre cette discussion.
• Une table de base est une table qui
contient des données réelles (c'est-à dire,
un fichier physique sur
l'iSeries).
• Une table de résultats est un ensemble
de lignes que DB2 UDB (DB2
Universal Database for iSeries) sélectionne
ou génère à partir d'une ou
plusieurs tables de base sous-jacentes.
• Un curseur SQL est une structure
permettant d'accéder à une table de
résultats par des opérations Fetch
ligne par ligne. En principe, on déclare
un curseur avec une instruction
Declare Cursor imbriquée dans un
programme en langage évolué
(HLL).
• Un curseur statique est un curseur
SQL dont l'instruction Select est
connue au moment de la compilation.
Bien qu'il faille définir complètement
la structure de l'instruction
Select au moment de la compilation,
on peut fournir des valeurs de comparaison
par le biais de variables de
programme (variables hôte) à l'exécution.
Pour plus d'informations sur
les curseurs statiques, voir l'encadré
Autres lectures.
• Un curseur dynamique est un curseur
SQL dont la structure de l'instruction
Select ne sera connue qu'à
l'exécution.
Le programme décrit ici utilise des curseurs dynamiques accompagnant l'instruction SQL Describe. On peut utiliser des curseurs dynamiques pour différer la déclaration de toutes les clauses de l'instruction Select (From, Where, Group By, Having, Order By, par exemple) jusqu'à l'exécution. On peut même utiliser des curseurs dynamiques pour différer la déclaration du format de la clause Select elle-même jusqu'à l'exécution. Mais cette façon de faire pose quelques problèmes. Si l'on ne connaît pas les définitions de colonnes dans la table de résultats du curseur au moment de la compilation, on ne sait pas combien de variables d'hôte il faut définir pour contenir les valeurs de colonnes, ni le type, la précision (nombre de chiffres) ou l'échelle (nombre de décimales) à utiliser. On peut résoudre ces problèmes à l'aide de l'instruction SQL Describe.