RPG (3 et 4, free), CL, SQL, etc...
germor
Messages : 75 Enregistré le : lun. 06 juin 2011, 08:01:43
Message
par germor » mer. 01 juil. 2015, 10:31:47
Bonjour,
Sous V7R1,
La conversion du "Tag" RPG en Free pose question.
Code : Tout sélectionner
/FREE
EXEC SQL
WHENEVER SQLERROR GOTO ERRSQL;
...
/END-FREE
C ErrSQL Tag
/FREE
//* action lors de l'erreur sql
cancel('Erreur SQL : ' + SQLSTT);
Existe t'il une astuce pour contourner le fait que Tag n'a aucun remplaçant dans RPG Free ?
Plus globalement, le "WHENEVER SQLERROR" ne doit il pas être abandonné au profit d'une gestion d'erreurs SQL après chaque instruction SQL ?
Merci d'avance pour vos réponses.
germor
Messages : 75 Enregistré le : lun. 06 juin 2011, 08:01:43
Message
par germor » mer. 01 juil. 2015, 12:00:54
Réponse à moi-même :
Je suis chaque fois toujours plus étonné (c'est mon coté fleur bleue
) de constater que c'est en énonçant puis en écrivant ma question sur le forum, que je trouve la réponse (Cela arrive environ 7 fois sur 10).
Ici, j'opte pour l'abandon de "WHENEVER SQLERROR" au profit d'un bon :
Code : Tout sélectionner
if SQLCODE <> 0 and SQLCODE <> 100;
cancel('SQLCODE= ' + %Char(SQLCODE) + ' SQLSTT= ' + SQLSTT);
endif;
après chaque ordre SQL.
cmasse
Site Admin
Messages : 813 Enregistré le : mer. 14 févr. 2007, 18:00:03
Localisation : Nantes
Contact :
Message
par cmasse » mer. 01 juil. 2015, 12:37:12
Le problème avec le WHENEVER c'est le GOTO (qui me semble une mauvaise pratique)
la solution proposée me semble être la bonne, on peut aussi utiliser GET DIAGNOSTICS
Code : Tout sélectionner
exec,sql
GET DIAGNOSTICS CONDITION 1
message = MESSAGE_TEXT
exec sql
GET DIAGNOSTICS CONDITION 1
etat = DB2_RETURNED_SQLSTATE | DB2_RETURNED_SQLCODE
exec sql
CALL procedure;
exec sql
GET DIAGNOSTICS valretour = RETURN_STATUS;
exec sql
DELETE From fichier Where ...;
exec sql
GET DIAGNOSTICS nbrdelignes = ROW_COUNT;
Christian Massé (Volubis.fr)