Voici une petite expérience à faire sur les zones étendues
Commençons par créer un fichier PF comme ceci
A R TESTAF
A NUMERO 5
A NOM 30
A PRENOM 30
Compilez-le
on lui met des données
par exemple par SQL
INSERT INTO GDATA/TESTA VALUES(‘AAAAA’, ‘Carlsen’, ‘Magnus’)
INSERT INTO GDATA/TESTA VALUES(‘BBBBB’, ‘Vachier-Lagrave’, ‘Maxime’)
INSERT INTO GDATA/TESTA VALUES(‘CCCCC’, ‘Firouzja’, ‘Alireza’)
Si on fait un DSPPFM, on voit ceci
On décide de changer NUMERO et de le passer en numérique
On a donc le fichier décrit comme suit
A R TESTNF
A NUMERO 5S 0
A NOM 30
A PRENOM 30
Vous le compilez
vous décidez de récupérer les données
par un CPYF
CPYF FROMFILE(TESTA)
TOFILE(TESTN)
MBROPT(*REPLACE) FMTOPT(*NOCHK)
vous faites DSPPFM du fichier TESTN, voici le résultat :
Vous faites un select * from TESTN voici le résultat :
C’est étonnant non ?
Si vous faites un contrôle de données vous n’avez pas d’erreur
SELECT * FROM TABLE(SYSTOOLS.VALIDATE_DATA_FILE(‘GDATA’, ‘TESTN’));
Vous allez me dire pourquoi ne pas faire le nouveau fichier comme une table, allons y ?
CREATE TABLE GDATA.TESTS (
NUMERO NUMERIC(5, 0) NOT NULL DEFAULT 0 ,
NOM CHAR(30) CCSID 1147 NOT NULL DEFAULT » ,
PRENOM CHAR(30) CCSID 1147 NOT NULL DEFAULT » )
RCDFMT TESTS
On récupère a nouveau des données
CPYF FROMFILE(TESTA)
TOFILE(TESTN)
MBROPT(*REPLACE) FMTOPT(*NOCHK)
Si on fait un DSPPFM voici le résultat :
Si on fait un select * from TESTS :
conclusion
Si vous copiez des données alpha dans du numérique étendu
1/ En DDS
Les données sont fausses dans le fichier et interprétées à l’exécution SQL
attention si vous lisez en RPG les données ne sont pas chargées et il n’y a pas d’erreur !
exemple :
fTESTN if e disk
read(e) TESTN ;
if %error ;
dsply ‘ici’ ;
else ;
dsply ‘la’ ;
dsply NOM ; ;
endif ;
*inlr = *on ;
2/ En SQL
Le données sont converties lors du CPYF, mais elles ne sont pas bonnes : on passe ici de AAAAA à 11111
Faites attention si vous récupérez des données numériques étendues vous pourriez avoir des surprises
Dernière remarque
Il n’y pas de problème avec des données packées :
En DDS, RPG ou SQL erreur à la lecture.
En SQL, impossible de copier les données.