Suite à des demandes multiples, je propose une implémentation de « DUMP » des enregistrements d’une table (plutôt d’un objet *FILE / PF-DTA, que ce soit un PF ou une table).
L’idée est d’obtenir u script SQL contenant les instructions INSERT permettant de reproduire les données dans une autre base.
A l’image de la commande mariadb-dump par exemple (https://mariadb.com/docs/server/clients-and-utilities/backup-restore-and-import-clients/mariadb-dump). C’est un moyen commun de faire des sauvegarde/restauration de la base pour ces technologies.
DMPSQL
Oui, je ne détaille pas ici le processus de mise à jour, c’est classique : téléchargement des images et clés sur ESS, PRUV pour les contrôle etc …
Le fichier SQLSAMPLE/EMPLOYEE est ici produit par :
CALL QSYS.CREATE_SQL_SAMPLE ('SQLSAMPLE')
Cette procédure vous permet de créer et recréer des bases de données à des fins d’exemple et de tests.
Contenu du fichier :

Il s’agit d’une table très classique, représentative de la plupart des données dans nos applications.
Exemple d’usage :
DMPSQL FILE(SQLSAMPLE/EMPLOYEE)
SQLSCRIPT('/home/NB/employee.sql')
Le résultat de notre commande :

Le fichier est en UTF-8 afin de permettre la gestion de l’ensemble des caractères usuels.
Le code est disponible ici : https://github.com/FrenchIBMi/Outils/tree/master/DMPSQL
Usage ?
Cela permettait de répondre à plusieurs demandes.
Premièrement, la réplication de données sans utiliser les commandes de sauvegarde/restauration. Ces dernières nécessitent des droits élevés, alors qu’ici nous ne faisons que manipuler de la donnée.
Deuxièmement, dans le cadre de traitement de journaux (initialement en vue d’une fonction de type CDC), pour permettre d’isoler un enregistrement que l’on souhaite répliquer (avec ou sans transformation) dans une autre table.
Vous trouverez certainement d’autres usages !
Limites
Le code est fourni « as is », pour démonstration.
Quelques limites d’usage actuellement
- Types de colonnes non supportées actuellement : CLOB, BLOB, DATALINK, XML, GRAPHIC, VARGRAPHIC, {VAR}CHAR CCSID 65535
- Pas plus de 16Mo par enregistrement
- On ne gère pas les alias, partitions, IASP
- 250 colonnes maximum
- En cas de multi-membres, seul le premier membre est traité
On peut bien évidemment ajouter de nouvelles fonctionnalités !
N’hésitez pas à donner un feedback, améliorer le code