A présent, nous pouvons rechercher les livres à renvoyer dans l'ensemble de résultats. La version actuelle de SQL/400 ne permet pas d'indiquer que l'on souhaite sélectionner les N premiers enregistrements (cependant, cette fonction devrait être disponible dans d'autres implémentations du SQL). On est donc contraint de lire les
Trouver la position d’un livre

enregistrements les uns après les autres dans un ordre décroissant par rapport
à la colonne de classement et de compter jusqu’à ce que l’on atteigne le
nombre de lignes désiré. Le curseur BookSaleCursor déclaré en E fournit la
table de résultats ordonnée de TotalUnits entrées pour les ventes de livres réalisées
la semaine précédente dans la catégorie spécifiée. Le curseur est ouvert en
L, puis une boucle (en N) récupère les lignes jusqu’à ce qu’il n’y ait plus
aucune ligne ou que le nombre de lignes défini ait été récupéré, ou encore
qu’une erreur se soit produite. Chaque instruction Fetch exécutée avec succès
réinitialise la valeur de la variable de travail RankTotalUnits à la valeur récupérée
dans la colonne TotalUnits. Une fois la boucle terminée, le curseur est refermé
(O).
Les livres qui ont le même
TotalUnits sont ex à¦quo, et le nombre approprié
de places est sauté pour déterminer le véritable rang du ou des livres
suivants
Remarquez comment, dans la boucle, la
variable de travail CurRank est incrémentée pour chaque enregistrement récupéré,
et ce, sans se soucier de la valeur TotalUnits de l’enregistrement. Cette
technique simple fonctionne même lorsque certaines lignes possèdent la même
valeur TotalUnits, car tout ce qu’il nous faut trouver est un livre dans
l’ensemble des livres qui possèdent le rang spécifié par le paramètre
CategoryRankIn. Considérez l’exemple suivant des six meilleures ventes de
livres :
Nombre total
Rang Valeur CurRank
16
1
1
12
2
2
12
2
3
11
4
4
10
5
5
10
5
6
Vous pouvez constater que les livres qui ont la même
valeur TotalUnits sont ex à¦quo dans le palmarès,
et que le nombre approprié de places est omis pour déterminer le rang véritable
du ou des livres suivants dans l’ordre de classement des ventes. Cependant, la
boucle de la procédure GetTopBook, assigne uniquement des rangs séquentiels à
chaque livre au fur et à mesure qu’ils sont récupérés. Cela ne crée aucun
problème car pour trouver les livres classés en cinquième position ou mieux,
par exemple, on peut lire l’une ou l’autre des deux lignes possédant un
TotalUnits de 10. L’important est de déterminer que 10 représente la valeur
seuil de TotalUnits pour les livres que l’on souhaite inclure dans l’ensemble de
résultats renvoyé. Dans ce cas, l’ensemble de résultats inclurait six livres,
et non cinq.
Vous pouvez constater que j’ai affecté
à la variable à RankTotalUnits la valeur MaxInt (M) avant la boucle. Si aucune
ligne ne satisfait la condition de recherche du curseur, la boucle ne récupérera
aucune ligne et RankTotalUnits restera égale à MaxInt, qui représente une
valeur seuil au-dessus de la valeur TotalUnits de n’importe quel livre (au moins
dans notre exemple). Cette approche n’est pas véritablement essentielle compte
tenu de la manière dont j’ai implémenté le reste de la procédure cataloguée,
mais elle garantit que RankTotalUnits possède une valeur précise à la fin de
la boucle.
Téléchargez cette ressource

État des lieux de la réponse à incident de cybersécurité
Les experts de Palo Alto Networks, Unit 42 et Forrester Research livrent dans ce webinaire exclusif leurs éclairages et stratégies en matière de réponses aux incidents. Bénéficiez d'un panorama complet du paysage actuel de la réponse aux incidents et de sa relation avec la continuité de l'activité, des défis auxquels font face les entreprises et des tendances majeures qui modèlent ce domaine. Un état des lieux précieux pour les décideurs et professionnels IT.
Les articles les plus consultés
Les plus consultés sur iTPro.fr
- Les risques liés à l’essor fulgurant de l’IA générative
- Pourquoi est-il temps de repenser la gestion des vulnérabilités ?
- Reporting RSE : un levier d’innovation !
- De la 5G à la 6G : la France se positionne pour dominer les réseaux du futur
- Datanexions, acteur clé de la transformation numérique data-centric
