> Tech > Concentrez-vous sur les curseurs

Concentrez-vous sur les curseurs

Tech - Par Renaud ROSSET - Publié le 24 juin 2010
email

L’une des meilleures utilisations de SQL imbriqué se manifeste lorsqu’il faut sélectionner des données d’après des critères multiples qui ne font pas partie de la clé conduisant au fichier. Supposons que vous vouliez créer un rapport contenant la liste de toutes les commandes des clients du Nevada qui ont acheté

un certain article au cours des six derniers mois. Bien sûr on peut produire ce rapport avec le seul RPG.

Mais SQL excelle tout particulièrement dans ce genre d’extraction de données. En revanche, RPG surpasse SQL quand il s’agit de formater des données, et il est très bien équipé pour produire une sortie imprimée, ce que SQL ne peut pas faire directement. Il est donc judicieux de combiner les deux langages : on simplifie le code et on améliore probablement la performance de l’application. Votre objectif devrait être le suivant : confier à SQL la partie requête du problème et laisser RPG traiter les données sélectionnées, que nous appellerons un jeu de résultats. (Un jeu de résultats est la sortie issue d’une instruction SQL Select.

Le jeu de résultats en question peut prendre la forme d’une feuille de calcul contenant les données satisfaisant à votre requête.) Pour travailler avec des jeux de résultats dans SQL imbriqué, il existe une astuce simple : déclarer un curseur pour une instruction Select et utiliser le curseur (identifié par son nom) comme pointeur pour naviguer dans le jeu de résultats. Cela se fait en quatre étapes (figure 3) : 1. Déclarer le curseur (en A). 2. Ouvrir le curseur – pas la table (en B). 3. Atteindre les lignes à partir du curseur (en C). 4. Fermer le curseur (en D). L’instruction Fetch (en C) extrait en réalité des lignes du jeu de résultats et elle est normalement incluse dans une structure en boucle RPG (par exemple DOW, DOU) afin de se répéter pour chaque ligne du jeu de résultats.

Quand Fetch atteint la fin du jeu de résultats, une erreur SQL est signalée, même si, à l’évidence, c’est une condition attendue. (Pour la signification des SQL states et des exemples de la manière de vérifier des erreurs SQL, voir l’article « Guide pour traiter les erreurs de SQL imbriqué ».) Vous allez sûrement faire quelque chose avec les données issues du jeu de résultats. Par exemple, afficher les données ainsi obtenues sur une page Web ou dans un sous-fichier, les imprimer dans un rapport, ou mettre à jour les lignes sélectionnées. Le code de la figure 3 extrait les données ligne à ligne et les rend accessibles au programme RPG.

Cependant, en utilisant un bloc Fetch, vous pouvez extraire de multiples lignes dans une structure hôte pour, par exemple, construire un affichage interactif. Vous pouvez aussi utiliser un curseur SQL pour accéder à la base de données sous-jacente pour y pratiquer des mises à jour et des suppressions, comme le montre la figure 4. Les figures 3 et 4 présentent quelques différences importantes. Premièrement, le curseur de la figure 3 est déclaré for read only (ce qui améliore la performance), tandis que celui de la figure 4 est déclaré for update. La seconde différence entre les deux exemples est l’ajout de l’instruction Update en A dans la figure 4.

L’ajout de Where Current of Cust Cursor fait la connexion entre la mise à jour et la position du curseur. Les curseurs SQL ont une dernière possibilité intéressante : ils peuvent lire le jeu de résultats de manière répétitive ou dans un ordre autre que du premier au dernier. Les curseurs capables de cela sont appelés curseurs défilables. Pour déclarer un curseur défilable, ajoutez simplement le mot-clé scroll à votre définition de curseur. Cela confère des possibilités supplémentaires à l’instruction Fetch, comme lire le jeu de résultats à l’envers, sauter en avant ou en arrière dans le jeu de résultats, et relire le jeu de résultats après en avoir atteint la fin.

(Pour plus d’informations sur les curseurs SQL, y compris les curseurs défilables, voir la section intitulée « Use a cursor » dans l’Information Center. Pour aller à cette section pour la documentation V5R4, naviguez ainsi : Database/Programming/ SQL programming/Use SQL in different environments.) Le SQL imbriqué ne se limite pas à extraire des jeux de résultats et à travailler avec les lignes sélectionnées individuellement. Vous pouvez aussi utiliser SQL pour insérer, mettre à jour ou supprimer de multiples lignes avec une instruction unique.

Téléchargez cette ressource

Comment sécuriser une PME avec l’approche par les risques ?

Comment sécuriser une PME avec l’approche par les risques ?

Disposant de moyens financiers et humains contraints, les PME éprouvent des difficultés à mettre en place une véritable stratégie de cybersécurité. Opérateur de services et d’infrastructures, Naitways leur propose une approche pragmatique de sécurité « by design » en priorisant les risques auxquelles elles sont confrontées.

Tech - Par Renaud ROSSET - Publié le 24 juin 2010