SQL erreur -802 en rpgle

RPG (3 et 4, free), CL, SQL, etc...
Répondre
BrigitteG
Messages : 109
Enregistré le : jeu. 20 sept. 2012, 08:56:38

SQL erreur -802 en rpgle

Message par BrigitteG »

Bonjour,

J'ai un petit soucis avec du code sql dans un source rpgle.

La zone contenue dans Wrubriq est définie en ALWNULL et peut-être une zone numérique ou une date.

Code : Tout sélectionner

DCL-S wNb         zoned(9:0);
Exec Sql
            select nunati, count(distinct :wRubriq) into :wNb
             from cinvrep
               where :wRubriq is not null
               group by nunati
               order by :wnb desc
              fetch first row only ;
            if sqlCod = 0;
             àNb = wNb;
            endif;
J'ai un code SQLCOD = -000000802.

Message . . . . : Erreur de conversion ou de mappage des données.
Cause . . . . . : Une erreur de type 1 s'est produite : Les types d'erreur et
leur signification sont les suivants :
1 - Dépassement de capacité arithmétique.

Quand je passe par strsql

Code : Tout sélectionner

select nunati, count(distinct IVIF) as wNb
             from cinvrep               
               where IVIF is not null     
               group by nunati            
               order by wnb desc          
              fetch first row only        

Code : Tout sélectionner

NUNATI                  WNB
7038215129                9
La requête marche.

N'étant pas une spécialiste du sql, je ne vois pas ce qui cloche.

Je vous en remercie d'avance pour votre aide.
Modifié en dernier par BrigitteG le lun. 19 sept. 2016, 15:17:07, modifié 1 fois.

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

SQL Dynamique

Message par cmasse »

Bonjour,

un nom de zone ou de colonne, ne peux pas être mis en tant que variable.

faites du SQL Dynamique, c.a.d concaténez l'ordre SQL dans une variable, puis :

PREPARE

DECLARE xx CURSOR FOR

FETCH xx
Christian Massé (Volubis.fr)

BrigitteG
Messages : 109
Enregistré le : jeu. 20 sept. 2012, 08:56:38

Utilisation du Prepare Declare ...

Message par BrigitteG »

Merci

voici mon code

Code : Tout sélectionner

àSql = 'Select count(distinct ' + %trim(wRubriq)
             + ') as wNb, Nunati  from cinvrep where '
             + %trim(wRubriq)
             + ' is not null group by nunati'
             + ' order by wNb desc'
             + ' fetch first row only' ;
             Exec Sql Prepare P2 from :àSql;
             Exec Sql Declare C2 Cursor for P2;
             EXEC SqL OPEN C2;
             EXEC SqL FETCH C2 INTO :wNb;
             EXEC SqL CLOSE C2;
             if sqlCod = 0;
              àNb = wNb;
             endif;
Je récupère bien le nb d'enreg maxi en fonction de mon numéro

Répondre