Fil d’Ariane du forum – Vous êtes ici :ForumForums techniques: AS/400SQL et champs numériques vides
Vous devez vous identifier pour créer des messages et des sujets.

SQL et champs numériques vides

12

Bonjour,

Soit un fichier LIB1/PF1  je sais que dans certains enregistrements certains champs de zones numériques n'ont pas été initialisés.
Je voudrais affecter la valeur zéro à tout champs numérique qui ne contient pas de valeur.

Comment faire ?

UPDATE LIB1/PF1 SET ZONE_NUM = 0 WHERE ZONE_NUM IS NULL

Merci remit mais LIB1/PF1 peut contenir plusieurs colonnes ou zones numériques et je voudrais les traiter toutes.

Au fait je ne voudrais pas faire ça  pour un fichier en particulier, je voudrais le faire pour tous les fichiers de LIB1. Chaque fichier ayant ses propres colonnes.

Alors, il faut répéter la commande autant de fois que nécessaire (quitte à les placer dans un fichier à lancer par RUNSQLSTM).

...oui mais je ne connais pas à priori les noms des colonnes  numériques

On peut interroger SYSCOLUMNS :

SELECT SYSTEM_COLUMN_NAME FROM QSYS2.SYSCOLUMNS WHERE SYSTEM_TABLE_SCHEMA = 'LIB1' AND SYSTEM_TABLE_NAME   = 'FIC1' AND DATA_TYPE IN('DECIMAL', 'SMALLINT', 'NUMERIC',  'INTEGER', 'BIGINT')  

 

Bonjour,

Il faudra se baser sur un fichier générer par DSPFFD.

ou pour les version IBM i les plus récentes sur les résultats obtenus par la requête:

Select COLUMN_NAME
  From SYSIBM.COLUMNS 
 Where Type_Name in('SMALLINT', 
                    'DECIMAL',
                    'NUMERIC',
                    'BINARY',
                    'BIGINT',
                    'VARBINARY',
                    'DOUBLE',
                    'REAL')
   And TABLE_SCHEM = 'MABIB'
   And TABLE_NAME = 'MATABLE'

Cordialement,

Olivier.

J'ai testé ceci :

SELECT SYSTEM_COLUMN_NAME 
  FROM QSYS2.SYSCOLUMNS 
 WHERE SYSTEM_TABLE_SCHEMA = 'MALIB' 
   AND SYSTEM_TABLE_NAME = 'PF1' 
   AND DATA_TYPE IN('DECIMAL', 'SMALLINT', 'NUMERIC', 'INTEGER', 'BIGINT') 

ça fonctionne bien.

Mais j'ai remarqué une chose. La requête suivante

SELECT TABLE_NAME, SYSTEM_COLUMN_NAME 
  FROM SYSCOLUMNS 
 WHERE SYSTEM_TABLE_SCHEMA = 'MALIB'  

Ne me retourne qu'une seule colonne TABLE_NAME et pas SYSTEM_COLUMN_NAME .

 

Si c'est par STRSQL, il faut paginer à droite (F20), la colonne TABLE_NAME est très large (ou alors CAST(TABLE_NAME AS CHAR(10)))

(aussi, ajouter les types numériques indiqués par Olivier Drubigny et que je n'avais pas mentionnés).

 

Citation de remit le 1 mars 2019, 15 h 36 min

Si c'est par STRSQL, il faut paginer à droite (F20), la colonne TABLE_NAME est très large (ou alors CAST(TABLE_NAME AS CHAR(10)))

(aussi, ajouter les types numériques indiqués par Olivier Drubigny et que je n'avais pas mentionnés).

 

Ah oui, je ne l'avais pas remarqué. Merci beaucoup remit.

12