Lors de la génération des
DDL, dans le cas où le DDM correspondant
comporterait un MU ou un PE, il y aura création
des programmes NATURAL permettant la mise à plat
des données sources, en tenant compte du format
des tables cible. Dans le cas contraire (pas de MU
et pas de PE), le fichier pourra être mis à plat
par l’intermédiaire de l’utilitaire ADACMP.
Dans le cas où le même FNR contiendrait des DDM
totalement indépendants, et où l’on veut
utiliser ADACMP, il faudra spécifier la liste des
champs de chaque DDM.
Lors de la création des DLL
pour la cible, il y aura génération d’un JCL
permettant la création d’un programme NATURAL
ayant en entrée le DDM du fichier ADABAS traité
et en sortie le ou les structures des fichiers à
remonter dans la cible.
Exemple :
Fichier ADABAS 001
constitué des champs
|
AA
(D)
|
AB
|
AC
|
AD
(MU)
|
Ce fichier contenant un MU,
il va donc y avoir 2 tables cible.
T001 constituée des
champs |
|
T00101 constituée des
champs |
AA
|
|
AA
|
AB
|
|
AD |
AC |
|
|
On supposera que AA est
unique
Le programme correspondant
sera remonté dans NATURAL par JCL :
//JOBNAME
JOB ...
//NATU
EXEC PGM=NATxxxx,REGION=5000K,
//
PARM=('FDIC=(50,11),FNAT=(50,8),FUSER=(50,209)',
//
'FSEC=(50,210),INTENS=1,AUTO=ON,IM=F,DU=ON')
//STEPLIB
DD DSN=...,DISP=SHR
//DDCARD
DD *
ADARUN MODE=MULTI,PROGRAM=USER,DB=??,SVC=???
//CMPRINT
DD SYSOUT=*
//CMSYNIN
DD *
LOGON CS
E
DEFINE
DATA LOCAL
01
DDM001 VIEW OF DDM001
02
AA
02
AB
02
AC
02
C*AD
02 AD(*)
01
T00101
02 AA
02 AB
02 AC
01
T00102
02 AA
02 AD
01
£CPT-LU
01
£CPT-ECRIT-01
01
£CPT-ECRIT-02
01
£CPT-OCC
END
–DEFINE
READ
DDM001 BY AA
ADD
1 TO £CPT-LU
MOVE
BY NAME DDM001 TO T00101
FOR
£CPT-OCC = 1 TO C*AD
MOVE DDM001.AA to T00102.AA
MOVE DDM001.AD(£CPT-OCC) TO T00102.AD
ADD 1 TO £CPT-ECRIT-02
WRITE WORK FILE 02 T00102
END-FOR
ADD
1 TO £CPT-ECRIT-01
WRITE
WORK FILE 01 T00101
END –READ
DISPLAY
‘Nombre de records lus
dans DDM001 ‘ £CPT-LU
/
‘Nombre de records écrits
dans T00101 ‘ £CPT-ECRIT-01
/
‘Nombre de records écrits
dans T00102 ‘ £CPT-ECRIT-02
END
.E
SAVE pgm1
/* si le nom existe déjà, le SAVE ne se
fait pas
STOW
*
FIN
/*
Les programmes de mise à
plat de la source seront générés dans le répertoire
<projet>\SOURCE\JCL\PGMUNLD
et auront comme nom
Paaaabb.pgm
aaaa : correspondant au FNR du DDM traité,
bb : chrono dans le cas où plusieurs DDM
existe pour ce FNR.
Les Pgm générés seront
transférés sur le host dans des PDS équivalents
aux directories du PC.
CS.JCL.PGM.NATURAL(<pgmname>)
//MAPnnn
EXEC NATURAL2,TIME=5
//CMPRINT DD SYSOUT=*
//CMWKF01 DD DSN=
CS.ADABAS.Taaaabb.Duaammjj,
//
SPACE=(TRK,(100,20),RLSE),RECFM=FB,
//
LRECL=lrecl de WKF01,BLKSIZE=
blksize du WKF01,
//
DISP=(NEW,CATLG,DELETE)
//CMWKF02
DD DSN= CS.ADABAS.Taaaabb.Duaammjj,
//
SPACE=(TRK,(100,20),RLSE),RECFM=FB,
//
LRECL=lrecl de WKF02,BLKSIZE=
blksize du WKF02,
//
DISP=(NEW,CATLG,DELETE)
//SYSIN DD *
LOGON CS
Nom pgm de déchargement
FIN
/*
//
Les JCL générés seront
transférés sur le host dans des PDS équivalents
aux directories du PC.
CS.JCL.PGM.NATURAL(<pgmname>)
1.3.2
Cas de DDM sans
MU ni PE ni SUPER-DESCRIPTEUR
Dans un soucis de gain de
temps, l’utilitaire ADACMP permet de mettre à
plat des fichiers ADABAS de gros volume dans un
minimum de temps.
//ADACMP EXEC ADACMP,BASE=dbid,FILE=fnr,MODE=MULTI,INDEX=userid,
//
INDEXIN=
userid,BASEIN= dbid,TYPIN=CMP,TYPOUT=DEC,
//
SPP=5,SPS=5,DISK=disk_travail,INFILE='DUMMY,'
//*
//ADACMP.DDAUSBA DD DSN= CS.ADABAS.Taaaabb.Duaammjj,
//
DISP=(NEW,CATLG,DELETE),
//
UNIT=unit_work,VOL=(,,,vol),
//
RECFM=VB,LRECL=lrecl,BLKSIZE=blksize
//*
//ADACMP.DDKARTE
DD *
ADACMP
DECOMPRESS INFILE= fnr
Les
cartes suivantes permettent de changer l’ordre
des champ lors du déchargement (facultatif si 1
FNR = 1 DDM, obligatoire dans le cas contraire (1
FNR = N DDM)).
ADACMP
FORMAT='AB,AA,AC,AD,AE,AF,'
ADACMP
FORMAT='AH,AG.'
La carte suivant permet de
mettre le fichier à plat suivant le tri donné.
ADACMP
SORTSEQ=AA,NU
/*
//*

Identification des fichiers séquentiels
sur HOST
Les fichiers générés par
ces programmes NATURAL auront comme nom
CS.ADABAS.Taaaabb.Duaammjj
Dans le cas où des fichiers
ADABAS contiendraient le champ *ISN, cette donnée
sera transformée en S9(8) COMP. En parallèle,
une table « Chrono » devra être créé
pour répondre au changement de structure. La
valeur de cette table sera l’ISN le plus grand
trouvé dans la colonne ISN du fichier ADABAS.
Les programme COBOL qui créeront des
record dans la table DB2 devront accéder à cette
table « Chrono » pour incrémenter ce
numéro.
|