> 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

Guide de technologie 5G pour l’entreprise

Guide de technologie 5G pour l’entreprise

Le livre blanc "The Big Book of Enterprise 5G" vous fournit les informations stratégiques dont vous avez besoin pour prendre des décisions éclairées et préparer votre entreprise à prospérer dans l'ère de la 5G. Cradlepoint, part of Ericsson est le leader mondial des solutions de réseau sans fil 4G LTE et 5G fournies via le cloud. Connectez vos employés, lieux et objets avec la 4G LTE et la 5G pour un WAN sans fil d'entreprise.

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