SQL/400 a une fonction propriétaire qui permet de spécifier une structure hôte (une structure de données RPG, un élément de groupe Cobol, par exemple), plutôt qu'une liste de variables d'hôte individuelles, sur une instruction Fetch imbriquée dans un programme HLL. Les valeurs des colonnes extraites sont placées dans les sous-champs
Conseil 2 : Utiliser des vues pour atteindre des lignes dans une structure hôte
de la structure,
en respectant l’ordre dans lequel les sous-champs sont déclarés.
Non standard, cette fonction simplifie néanmoins le
coding. Une fonction connexe, tableaux de structure hôte,
peut aussi améliorer nettement la performance en permettant
d’extraire plusieurs lignes lors de chaque opération
Fetch.
Le moyen le plus simple et le plus sûr de déclarer une
structure hôte consiste à référencer une table ou une vue
comme un fichier externe. On pourra ensuite utiliser « Select
* … » sur la déclaration du curseur associée qui fait référence
à la même table ou vue. En utilisant ces techniques ensemble,
on a la certitude que chaque fois que le programme
est compilé, la structure hôte et les colonnes du curseur correspondent
parfaitement.
Toutefois, quand on ne veut qu’un petit nombre de
colonnes d’une table, cette méthode doit être affinée. Une
solution simple consiste à créer une vue qui ne liste que les
colonnes nécessaires. Puis à référencer cette vue dans le curseur
et (comme un fichier externe) dans la déclaration de
structure hôte. Comme une vue SQL ne conduit jamais DB2
à créer un chemin d’accès à clé, on ne subira pas un volume
de mise à jour excessif du fait qu’il y a trop de vues sur une
table.
L’instruction suivante crée une vue que l’on peut utiliser
pour une extraction équivalente de celle du Conseil 1 :
Create View CustIdName As
Select CustId, CustName
From Customer
L’instruction suivante crée une structure de données ILE
RPG qui servira de structure hôte pour extraire des données
au travers de cette vue :
D CustNameR E DS
ExtName( CustName
La déclaration du curseur associée serait alors
Declare Cursor CustNameCsr
Cursor For
Select *
From CustIdName
Order By CustName
Et l’instruction Fetch serait
Fetch Next
From CustNameCsr
Into:CustNameR
Sachez qu’il faudra inclure les colonnes utilisées dans la
clause Where d’un curseur dans la définition de vue ou utiliser
une clause Where qui fait référence à la table sous-jacente,
comme dans cet exemple qui ne sélectionne que les
clients d’une certaine ville :
Declare Cursor CustCityCsr
Cursor For
Select *
From CustIdName As CN
Where CN.CustId
In ( Select C.CustId
From Customer As C
Where C.CustCity =
:InpCustCity )
Order By CustName
Téléchargez cette ressource
Reporting Microsoft 365 & Exchange
Comment bénéficier d’une vision unifiée de vos messageries, protéger vos données sensibles, vous conformer aisément aux contraintes réglementaires et réduire votre empreinte carbone ? Testez la solution de reporting complet de l’utilisation de Microsoft 365 et Exchange en mode Cloud ou on-premise.
Les articles les plus consultés
Les plus consultés sur iTPro.fr
- Les entreprises, victimes des coûts cachés des attaques de ransomwares
- Tendances des budgets des DSI en 2025
- Révolutionner la gestion du stockage à l’ère de l’IA et de la transformation numérique : vers une infrastructure agile et automatisée
- Multicloud Computing : Êtes-vous prêt pour la prochaine nouvelle vague informatique ?
- IA : les PME devraient adopter des outils NoCode appropriés