Dans les applications de gestion, on est très souvent amené à lire un ensemble d'enregistrements " détail " partageant un enregistrement " maître " commun. Par exemple, lire les enregistrements articles de la ligne pour l'enregistrement d'une commande. Normalement, en RPG, ce type d'opération est mis en oeuvre au moyen
Technique 2: Lire et écrire un ensemble d’enregistrements ayant une valeur commune sur une zone de clé
d’un chemin d’accès par clé pour le fichier détail,
en spécifiant une clé composite (par exemple une clé avec MasterId comme zone
de clé majeure et Seq comme zone de clé mineure). Dans un programme RPG, il
faut coder une opération SetLL pour que le pointeur se positionne sur le premier
enregistrement ayant la valeur de clé majeure spécifiée (par exemple MasterId)
et exécute ensuite les opérations ReadE en boucle jusqu’à ce qu’il n’y ait plus
d’opérations ayant la même valeur de clé majeure.
La figure 2a montre l’essentiel de cette implémentation. Pour
des raisons de place, j’ai omis la structure de données des informations, ainsi
que les opérations d’ouverture et de fermeture de fichiers, qui sont identiques
à celles de la figure 1a. La déclaration de KList spécifie seulement la zone
de la clé majeure (c’est-à -dire SlcMasterId). Le code opération SetLL spécifie
à cette clé partielle de positionner le pointeur du fichier. Bien que ce ne
soit pas indispensable, je recommande de vérifier que l’opération est parvenue
à pointer un enregistrement ayant une valeur majeure égale à celle spécifiée,
comme je l’ai fait avec la fonction intégrée %Equal de cet exemple. (Ce qui
permet de détecter la condition » empty set » à un emplacement plus pratique
du code, et évite une opération d’I/O inutile lorsqu’il n’y a aucun enregistrement
correspondant à la clé partielle). L’opération ReadE utilise la même KList et
emploie la fonction intégrée %Eof pour déterminer quand il n’y a plus d’enregistrements
ayant la même valeur de clé majeure.
La technique SQL est un peu plus simple : elle consiste à déclarer
un curseur incluant seulement l’ensemble d’enregistrements souhaités (c’est-à -dire
ceux ayant une valeur de zone commune), puis à l’ouvrir pour lire tous les enregistrements
disponibles. Pour extraire les enregistrements dans l’ordre, par la/les zone(s)
de clés mineure, il faut ajouter une clause Order By spécifiant cette/ces zone(s).
SQL ne nécessite pas de chemin d’accès à clés pour ce type d’accès, bien que
celui-ci donne de meilleures performances pour de nombreuses applications.
La figure 2b montre le code SQL essentiel, qui ressemble beaucoup
à celui de la figure 1c, à la différence près que l’instruction Fetch est exécutée
en boucle, parce que l’ensemble de résultats du curseur peut inclure plusieurs
enregistrements. La déclaration de curseur possède aussi une clause Order By
MasterId, Seq pour classer les enregistrements extraits par la zone de clé mineure.
Comme la clause Where limite l’ensemble de résultats aux enregistrements avec
la même valeur de clé majeure, il n’est pas nécessaire de coder la zone de la
clé majeure sur la clause Order By pour obtenir la séquence correcte. Cependant,
coder la clé complète peut aider l’optimiseur à trouver un chemin d’accès sur
clé correspondant et à améliorer ainsi les performances. L’état SQL (c’est-à -dire
SqlStt) défini par l’opération Fetch contrôle la boucle. L’instruction Open
Cursor aboutira, même s’il n’y a pas d’enregistrements ayant la valeur de la
clé majeure spécifiée. La boucle se terminera tout simplement, une fois que
la première exécution de l’instruction Fetch aura renvoyé l’état SQL SqlStateNoRow.
On peut déterminer qu’il n’a été trouvé aucun enregistrement pour la valeur
de la clé majeure spécifiée, en ajoutant du code pour compter le nombre d’instructions
Fetch réussies.
SQL/400 permet de lire plusieurs enregistrements à chaque exécution
d’une instruction Fetch, plaçant les résultats dans une série de structures
hôtes
SQL/400 permet de lire plusieurs enregistrements à chaque exécution
d’une instruction Fetch, plaçant les résultats dans une série de structures
hôtes. Ceci peut améliorer les performances, comme l’explique l’article » Tirez
la quintessence de votre base de données grâce à RPG & SQL ! « . (Pour en savoir
plus sur la mise en oeuvre des rangées de structures hôtes, voir l’article »
Une approche pas à pas des structures hôtes de SQL/400 « ).
Figure 2a Code RPG IV pour lire un ensemble d’enregistrement |
Figure 2b Code SQL/400 pour lire un ensemble d’enregistrement |
Téléchargez cette ressource

Prédictions 2025 des menaces persistantes avancées
L'analyse et l'évolution du paysage des menaces persistantes avancées (APT) et des conséquences sur vos infrastructures IT. Découvrez la synthèse des prédictions, tendances et recommandations pour 2025 avec les experts Kaspersky.
Les articles les plus consultés
Les plus consultés sur iTPro.fr
- Un leadership décisif en matière d’IA propulse l’innovation
- En route vers l’inconnu : comment préparer les équipes à l’ère de l’IA
- L’Europe, un leader mondial de l’IA
- L’Intelligence Artificielle, le nouveau copilote du CRM : une révolution incontournable
- Optimiser la gestion de la relation client dans le secteur des sciences de la vie
