Page 1 sur 1

SQLRPGLE, travail avec valeur nulle

Posté : lun. 11 août 2014, 13:16:19
par BrigitteG
Bonjour,

Dans sqlrpgle, je lis un fichier dont certaines zones peuvent avoir nulles.

Pour éviter d'avoir l'erreur SQLCOD = -000000305 (La variable indicateur doit être indiquée.), j'ai utilisé ifnull(zone,'0')

Code : Tout sélectionner

EXEC SqL  DECLARE C3 CURSOR FOR
  SELECT clé, ifnull(z1,'0'), ifnull(z2,'0'),
             ifnull(z3,'0') FROM fichier
    where clé = :wclé  and
              (z1 is NOT NULL or z2 is NOT NULL or z3 is NOT NULL)
    group BY clé, z1, z2, z3
    order by clé
  FOR FETCH ONLY;
EXEC SqL OPEN C3;
  dow sqlCod = 0;
  EXEC SqL FETCH C3 INTO :wclé1, :wz1, :wz2, :wz3;
  if sqlcod = 0;
  if z1....            
Mais la z2, le zéro est significatif, donc je ne peux pas utiliser ifnull(z2,'0').

Comment faire pour ne charger wz2 que si z2 is not null ?

Merci d'avance pour votre aide.

SQLRPGLE, travail avec valeur nulle

Posté : lun. 11 août 2014, 13:28:22
par BrigitteG
Je viens de trouver la réponse sur votre site http://www.volubis.fr/news/liens/AF4SRC ... QL400P.HTM.

valeur nulle

Posté : lun. 11 août 2014, 13:34:38
par cmasse
Essayez plutôt avec les variables indicateur, qui sont des variables déclarées

Code : Tout sélectionner

D ind1                      s               5I 0  

Code : Tout sélectionner

EXEC SqL  DECLARE C3 CURSOR FOR
  SELECT clé, z1 ,z2, z3
             FROM fichier
    where clé = :wclé  
    group BY clé, z1, z2, z3
    order by clé
  FOR FETCH ONLY;
EXEC SqL OPEN C3;
  dow sqlCod = 0;
  EXEC SqL FETCH C3 INTO :wclé1, :wz1:ind1, :wz2:ind2, :wz3:ind3;
  if sqlcod = 0;
  if ind1< 0;
    ...         

les variables ind1,ind2 et ind3 contiennent
  • 0 -> z1 contient qq chose, du coup wz1 aussi.
    -1 -> z1 contient NULL dans la base (s'affiche '-' sous STRSQL)
    -2 -> impossible de "fabriquer" le résultat (s'affiche '+++' sous STRSQL)

(sans texte)

Posté : lun. 11 août 2014, 15:52:11
par BrigitteG
Merci