, Faire un CSV avec SQL

Il existe plusieurs solutions pour faire du CSV, la plus connue c’est en utilisant la commande CPYTOIMPF, mais vous pouvez générer directement un fichier CSV en utilisant SQL, voici un petit tutoriel pour vous aider :

Vous devrez utiliser les procédures QSYS2.IFS_WRITE*

https://www.ibm.com/docs/en/i/7.4?topic=is-ifs-write-ifs-write-binary-ifs-write-utf8-procedures

Voici un exemple qui comporte la génération du fichier, l’ajout d’un entête et la génération des listes de détail. Nous avons choisi de faire sans délimiteur et avec « ; » comme séparateur. Le fichier obtenu est directement lisible par Excel.

Si vous voulez un délimiteur voici une variante sur les select avec  » comme délimiteur

Pour les entêtes de ligne :

LINE => ‘ »Les_options » ; « Les_commandes »‘)

Pour les lignes de détail, on enlève les blancs :

select ‘ »‘ concat trim(option) concat ‘ » ; « ‘ concat trim(command) concat ‘ »‘ as option_txt from qgpl.qauoopt

BEGIN
  -- Créér ou remplacer le fichier dans l'IFS
  CALL QSYS2.IFS_WRITE_UTF8(PATH_NAME =>'les_options_pdm.csv', 
                       LINE => '', 
                       OVERWRITE => 'REPLACE', 
                       END_OF_LINE => 'NONE');
  -- Mettre l'entête de colonne                     
  CALL QSYS2.IFS_WRITE_UTF8(PATH_NAME =>'les_options_pdm.csv', 
                       LINE => 'Les_options ; Les_commandes'); 
  -- Ecriture d'une ligne obtenue dans le select  
  FOR select option concat ';' concat command  as option_txt from qgpl.qauoopt DO
    CALL QSYS2.IFS_WRITE_UTF8(PATH_NAME => 'les_options_pdm.csv', 
                         LINE => option_txt);
  END FOR;
END;

Dans cet exemple, on a utilisé la procédure QSYS2.IFS_WRITE_UTF8 pour générer le fichier directement en UNICODE et éviter les problèmes de CCSID, c’est le sens de l’histoire …

Nous n’avons pas précisé de répertoire. Le fichier est créé dans le répertoire par défaut de l’utilisateur, en principe /home/<user>

.

Conclusion :

C’est une solution simple et efficace qui permet de générer un fichier sans passer par un fichier intermédiaire en DB2.

Si vos zones sont numériques vous devrez les convertir par la fonction CHAR()

Merci Nath pour ton aide.