Comment remplacer le WHENEVER SQLERROR ?

RPG (3 et 4, free), CL, SQL, etc...
Répondre
germor
Messages : 75
Enregistré le : lun. 06 juin 2011, 08:01:43

Comment remplacer le WHENEVER SQLERROR ?

Message par germor »

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 »

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&#40;'SQLCODE= ' + %Char&#40;SQLCODE&#41; + ' SQLSTT= ' + SQLSTT&#41;; 
       endif;   
après chaque ordre SQL.

cmasse
Site Admin
Messages : 794
Enregistré le : mer. 14 févr. 2007, 18:00:03
Localisation : Nantes
Contact :

GOTO

Message par cmasse »

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)

Répondre