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.