Comme les valeurs SQL state sont toujours des chaînes de cinq caractères, il est facile de tester soit la valeur entière, soit les deux premiers caractères qui indiquent la classe. Voici plusieurs profils RPG IV éprouvés que vous pouvez reproduire et modifier pour vérifier le SQL state dans vos programmes. Voir l’encadré « Traitement des erreurs ILE Cobol », pour des conseils sur la manière d’adapter ces profils pour des programmes ILE Cobol.
En premier lieu, déclarez des mnémoniques (c’est-à-dire des constantes nommées en ILE RPG) pour les classes SQL state et les valeurs complètes que vous voulez vérifier. Incluez un mnémonique pour le préfixe « 01 » qui désigne la classe d’avertissement. (J’ai aussi inclus un mnémonique pour False, que j’utilise dans l’un des profils décrits plus loin.) Vous pouvez placer ces déclarations dans un membre /Copy pour simplifier la réutilisation du code. La figure 2 en montre un exemple. Vous pouvez utiliser ces mnémoniques avec plusieurs profils courants pour tester l’issue d’une instruction SQL, selon la situation. Pour des instructions où la seule issue qui vous intéresse est « success » (réussite), le simple test suivant suffira :
If SqlState <> SqlStateOK ExSr SqlError EndIf
Vous pouvez utiliser une variante de ce profil, par exemple, en appelant une procédure au lieu d’exécuter une sous-routine. La figure 3 montre une approche qui passe le SQL state et une chaîne décrivant l’instruction en échec. Après des instructions Fetch dans une boucle, pour détecter quand il n’y a plus de lignes disponibles ainsi que pour détecter les avertissements et erreurs, utilisez le test de la figure 4.
Ce profil élimine en premier le cas le plus probable : un Fetch réussi. Puis il recherche la condition « end of result set » en testant la présence de l’état « 02000 ». Ce n’est qu’après avoir vérifié ces états prévus que le code teste les SQL states dans la classe avertissement. (Les deux premiers caractères de SqlState sont « 01 ».) Tout autre résultat est traité comme une erreur. A noter qu’il y a deux autres valeurs SqlState dans la classe « 02 » outre « 02000 ». Mais elles ne devraient normalement pas survenir avec une instruction Fetch, et donc elles seraient aussi traitées en tant qu’erreurs par ce profil.
Le renouvellement d’un parc IT peut rapidement faire grimper les dépenses. Inventaire incomplet, postes surdimensionnés, manque de standardisation, perte de valeur du matériel et achats réactifs : découvrez les cinq…
Passez à la cybersécurité proactive, transformez la collecte et l’analyse des logs en un bouclier dynamique contre les cybermenaces. Découvrez comment mettre en place une approche SIEM modulaire, évolutive et…
