November 14, 2011 – 2:13 pm
Symbolic parameters used in JCL can be assigned a value using the SET statement.
// SET INFILE=MY.DATA.SET.HERE
You can also give an eight character (upto 8 char) name to this statement.
//MYVARS SET INFILE=MY.DATA.SET.HERE
Multiple variables can be defined in a SET statement – separated by comma.
//MYVARS SET INFILE1=MY.DATA.SET.HERE,PARM1='KARTHIK'
Learn more
November 14, 2011 – 1:53 pm
Let’s say we have a file with first byte having 2 different values ‘A’ or ‘B’ or any other character.
We are going to create a file with all records starting with A (DD name SORTXXA), a second file with all records starting with B (DD name SORTXXB), a third file (DD name SORTXXX) with remaining records.
SORT FIELDS=COPY
OUTFIL FNAMES=SORTXXA,INCLUDE=(1,1,CH,EQ,C'A')
OUTFIL FNAMES=SORTXXB,INCLUDE=(1,1,CH,EQ,C'B')
OUTFIL FNAMES=SORTXXX,SAVE
November 14, 2011 – 1:42 pm
SYMNAMES is a means of defining variables in SORT. When you have a complex sortcard, it becomes hard to have your sort control card ‘readable / understandable’. It is a good practice to always use SYSNAMES DD to define variables and then use the logical variable names in Sort card.
Below is an example with the SYMNAMES DD (variables declared) and SYSIN (the ‘sort control card’).
//SORTSTEP EXEC PGM=SORT
//SYSOUT DD SYSOUT=*
//SORTIN DD DISP=SHR,
// DSN=MYDSN.NAME
//SORTWK01 DD UNIT=SYSDA,SPACE=(CYL,2000)
//SORTWK02 DD UNIT=SYSDA,SPACE=(CYL,2000)
//SORTWK03 DD UNIT=SYSDA,SPACE=(CYL,2000)
//SYMNAMES DD *
Name,1,10,CH
Age,11,2,ZD
/*
//SYSIN DD *
SORT FIELDS=(Age,D)
INCLUDE FILEDS=(Age,GT,25)
/*
//SORTOUT DD DISP=(NEW,CATLG,DELETE),
// SPACE=(CYL,(250,100),RLSE),
// UNIT=DISK,
// DCB=(RECFM=FB,LRECL=80,BLKSIZE=0),
// DSN=MYDSN.OUTPUT.NAME
read more on SYMNAMES
October 1, 2011 – 1:00 pm
Updating/ REWRITING a VSAM record:
VSAM declaration should look like,
FILE2 is the DD name – must have DISP=OLD
Reading VSAM file by Key and updating the record
----+----1----+----2----+----3----+----4----+----5----+----6----+----7--
LIST ON
FILE FILE1 FB(80 200)
IN-REC 1 80 A
IN-KEY 1 8 A
FILE FILE2 VS UPDATE
F2-REC 1 18 A
F2-KEY 1 8 A
F2-VALUE 9 10 N
JOB INPUT NULL
GET FILE1
DO WHILE NOT EOF FILE1
READ FILE2 KEY IN-KEY STATUS
IF FILE2 : FILE-STATUS EQ 0
F2-VALUE = F2-VALUE + 5
WRITE FILE2 UPDATE
ELSE
DISPLAY IN-KEY ' NOT PRESENT IN VSAM FILE'
END-IF
GET INFILE
END-DO
STOP
Delete a VSAM file (Cluster):
//STEP01 EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
DELETE my.vsam.file CLUSTER
/*
IDCAMS Utility can be used to create a GDG base, as well as deleting an existing base.
Define a GDG base:
//STEP01 EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
DEFINE GENERATIONDATAGROUP (NAME(gdg.base) -
NOEMPTY SCRATCH LIMIT(4))
/*
Delete/Purge a GDG base:
//STEP01 EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
DELETE gdg.base PURGE
/*
Below step will get the number of records present in IN1 and IN2 files. The counts will be displayed in TOOLMSG DD. This will come handy, when you need to get count of big files and you have so many files to check the count.
//STEP01 EXEC PGM=ICETOOL
//DFSMSG DD SYSOUT=*
//TOOLMSG DD SYSOUT=*
//SYSOUT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//IN1 DD DSN=MY.DSN.ONE,DISP=SHR
//IN2 DD DSN=MY.DSN.TWO,DISP=SHR
//TOOLIN DD *
COUNT FROM(IN1)
COUNT FROM(IN2)
October 30, 2010 – 1:48 pm