Uncategorized

Build records without a program

I am following various mainframe forums and I find this interesting utility IEBDG-Test Data generator. I did not know about this utility for long. Sometimes we had to build millions of records to volume test an application. I always hate to write a program as it takes time to construct and test it (still might have some errors). I looked for an Utility that could build records without any input and IEBDG helped me out.

To illustrate, below is an example code that builds 100 different records without any input

JCL

//IEBDG EXEC PGM=IEBDG
//SYSPRINT DD SYSOUT=*
//SEQOUT DD DSN=ADCF74C.SUN.SORTTEST,DISP=(CATLG,DELETE),
// UNIT=SYSDA,SPACE=(CYL,(1,1),RLSE),DCB=(RECFM=FB,LRECL=170,BLKSIZE=0)
//SYSIN DD *
DSD OUTPUT=(SEQOUT)
FD NAME=F1,LENGTH=10,STARTLOC=1,FORMAT=ZD,INDEX=5
FD NAME=F2,LENGTH=1,STARTLOC=12,FORMAT=AL,ACTION=RP
FD NAME=F3,LENGTH=10,STARTLOC=22,PICTURE=6,'SAMPLE',FILL=X'40'
CREATE QUANTITY=100,NAME=(F1,F2,F3),FILL=X'40'
END
/*Output

0000000001 A SAMPLE
0000000006 B SAMPLE
0000000011 C SAMPLE
0000000016 D SAMPLE
0000000021 E SAMPLE
0000000026 F SAMPLE
0000000031 G SAMPLE
0000000036 H SAMPLE
0000000041 I SAMPLE
0000000046 J SAMPLE

Comments
Let me explain the Sysin statements here

DSD statement should be the first line and it should contain the definition of the Input/Output files defined in the JCL. In this example we just have one output file defined by DD name SEQOUT

FD indicates field definition.
FD NAME=F1,LENGTH=10,STARTLOC=1,FORMAT=ZD,INDEX=5
The above statement means Define field F1 of length 10 ,the starting location of this field in the output file is 1 and the format is a zoned decimal. Increment this field by 5

(Index = 5)

FD NAME=F2,LENGTH=10,STARTLOC=12,FORMAT=AL,ACTION=RP

The above statement means Define field F2 of length 1 ,the starting location of this field in the output file is 12 and the format is alpha. Increment this field in every record

FD NAME=F3,LENGTH=10,STARTLOC=22,PICTURE=6,'SAMPLE',FILL=X'40'
The above statement means Define field F3 of length 10 ,the starting location of this field in the output file is 22 and it is a string"SAMPLE" of fixed length

CREATE QUANTITY=100,NAME=(F1,F2,F3),FILL=X'40'
Create statement actually creates the records using the fields defined above. The " FILL=X'40' " indicates any unused bytes in the file to be filled with spaces. The QUANTITY=100 indicates number of records to be created.

Sometime you might have to build a master file with LRECL say 1000. In this case you may not be able to define each and every field.

For example you have a master file which is 100 bytes in length. You want to build say 10,000 records , but you may just want a unique Account number in each records and all the other fields in the record can have the same data. In this case we can use a template record with all the fields defined except account number . We can use this record to generate 100 records with different account numbers alone

Example
Template record    
xxx ABCD
Your required output

001 ABCD
002 ABCD
.
.
..
100 ABCD

JCL

//IEBDG EXEC PGM=IEBDG
//SYSPRINT DD SYSOUT=*
//IN1 DD DSN=ADCF74C.SUN.SORTTEST,DISP=SHR
//OUT1 DD DSN=ADCF74C.SUN.SORTEST,DISP=(,CATLG,DELETE),
// UNIT=SYSDA,SPACE=(CYL,(1,1),RLSE),DCB=(RECFM=FB,LRECL=7,BLKSIZE=0)
//SYSIN DD *
DSD OUTPUT=(OUT1),INPUT=(IN1)
FD NAME=F1,LENGTH=3,STARTLOC=1,FORMAT=ZD
FD NAME=F2,LENGTH=4,FROMLOC=5,INPUT=IN1
CREATE QUANTITY=10,NAME=(F1,F2),INPUT=IN1
END
/*

 

The field Definition for F2 indicates that the positions 5 -8 is copied from the input file

The above examples are simple to help understand the utility. You could create data in any format (packed, binary etc) .You could do any number of things with IEBDG
If anybody has questions or any specific problems on using the above utility please let me know. Also if anybody has used this utility before in a different way, please share your code.

Questions/Suggestions/Comments are always welcome

Thanks
Som