Inter­cep­ter les erreurs SQL en RPG ile

Inter­cep­ter les erreurs SQL en RPG ile

ven 15 novembre 2019 0 Par Ibmiiste

SQL c’est bien MAIS !

En RPG ile, quand une requête SQL se passe mal, le SQLCODE est néga­tif tout le monde le sait. Cepen­dant dans le cas du code SQL embar­qué dans du RPG ile, si le code SQL est infé­rieur à zéro, le RPG ne peux pas l’in­ter­cep­ter avec un moni­tor par exemple.

La solu­tion est d’é­crire une pro­cé­dure qui va pro­vo­quer une erreur inter­pré­table par les opé­ra­tions d’in­ter­cep­tion (Moni­tor, *PSSR, Exception/error system…).

C

Voi­ci ci-des­sous les expli­ca­tions sur la pro­cé­dure utilisée :

  • Lignes 9 à 17, nous décla­rons le pro­to­type de récep­tion de l’A­PI QUSRJOBI.
  • Ligne 20 nous décla­rons la DS du for­mat JOBI100 de l’A­PI QUSRJOBI
  • Lignes 25 à 35, nous décla­rons le pro­to­type de l’A­PI QMHSNDPM qui nous ser­vi­ra en envoyé des mes­sages programme
  • Lignes 38 à 46 la DS sndpgmm­sg va recueillir les infor­ma­tions rela­tives à l’er­reur SQL inter­cep­tée. Elle est ini­tia­li­sé avec le code mes­sage CPF9898, puis selon le code SQL reçu, elle sera mise à jour avec des infor­ma­tions supplémentaires.
  • Ligne 48 est décla­rée la variable msg­da­ta qui reçoit les valeurs qui prennent la place des par­ties variables du mes­sage (SQLERRMC).
  • Lignes 54 à 71, SQLCA est décla­ré car ce source est décla­ré en type RPGILE.
  • Lignes 73 à 75 pro­to­type de la pro­cé­dure sleep qui a pour fonc­tion de faire un délai, comme la com­mande CL DLYJOB.
  • Ligne 80 à 84 décla­ra­tion de l’in­ter­face pro­cé­dure, le 1er para­mètre contient le SQLCA de la requête que l’on sou­haite et qui sera contrô­lée pour extraire une erreur éven­tuelle. Le 2me pare­mètre indique s’il faut ou non envoyé un mes­sage d’é­chap­pe­ment en cas de SQL­code néga­tif, par défaut « oui ».
  • Lignes 95 à 123, contrôles des dif­fé­rents niveaux de SQLERR pour déter­mi­ner quels type de mes­sage (CPF, CPD, SQL) il s’a­git. Les numé­ro de mes­sage sont extrait des variables SQLERRx.
  • Lignes 125 à 129, on extrait le texte du message.
  • Lignes 131 à 143, on affiche un mes­sage en cas de tra­vail interactif.
  • Lignes 145 à 148, si le SQL­code est néga­tif et que l’on sou­haite une inter­cep­tion de mes­sage par le sys­tème, on envoi un mes­sage d’échappement.