Showing posts with label JCL Programs. Show all posts
Showing posts with label JCL Programs. Show all posts

JCL to submit particular steps of another JCL using IEBEDIT

You may get a scenario where you wish to submit/execute only particular steps of a jcl and exclude 
others. Although this can be handled by using COND parameter but this would require editing
the original JCL to include COND parameter at each step and may be tedious exercise, and you 
might not have the access to change the original JCL.
 
The following JCL using IEBEDIT utility can be helpful in acheiving the above without 
editing the original JCL.
 
This would include Step name STEP010 of Jcl JOBNAM1 present in library
USERID.ABC.JCLLIB
 
 
//IEBEDITA JOB (XXXXXXXX,,,,,XXXX),'       ',CLASS=T,         
//            MSGCLASS=Y,NOTIFY=&SYSUID                       
//*===========================================================
//* EXAMPLE FOR IEBEDIT UTILITY                               
//*===========================================================
//STEP001  EXEC PGM=IEBEDIT                                   
//SYSUT1   DD  DSN=USERID.ABC.JCLLIB(JOBNAM1),DISP=SHR    
//SYSUT2   DD  SYSOUT=(*,INTRDR)                              
//SYSPRINT DD  SYSOUT=*                                       
//SYSIN    DD  *                                              
  EDIT TYPE=INCLUDE,STEPNAME=(STEP010)                       
/*         
 
 
Where 
 
USERID.ABC.JCLLIB is the Library containing the Input JCL
 
and
 
JOBNAM1 is the input JCL name
 
 
The other examples of SYSIN card can be
 
 
  EDIT TYPE=INCLUDE,STEPNAME=(STEP010,STEP040)        - To include stepnames STEP10 and STEP40               
  
  EDIT TYPE=EXCLUDE,STEPNAME=(STEP040)                - To exclude stepnames STEP40

Simple Jcl Programs

SORT JCL

File Edit Confirm Menu Utilities Compilers Test Help
EDIT IBMMFS.MAC.JCLS(SORT) Columns 00001 - 00072
****** ***************************** Top of Data **************************************
000001 //SORT JOB 'IBMMFS','MAC',CLASS=A,MSGCLASS=X,NOTIFY=&SYSUID
000002 //STEP1 EXEC PGM=SORT,PARM='NOLIST'
000003 //SYSOUT DD SYSOUT=*
000004 //SORTIN DD DSN=IBMMFS.MAC.PS,DISP=SHR
000005 //SORTWK01 DD UNIT=SYSDA,SPACE=(CYL,(1,1)) <= IF NOT ENOUGH ADD MORE
000006 //SORTOUT DD DSN=IBMMFS.MAC.SORTPS,DISP=SHR
000007 //SYSIN DD *
000008 INCLUDE COND=(8,2,BI,GT,12,2,BI,OR,15,3,CH,EQ,C'MAC') <=SELECT COND
000009 SORT FIELDS=(1,5,CH,A,9,3,CH,D) <= DFSORT CONTROL STATEMENTS
000010 /*
000011 //
****** **************************** Bottom of Data ************************************

Command ===> SUB Scroll ===> PAGE


F1=Help F3=Exit F5=Rfind F6=Rchange F12=Cancel

MERGE JCL
File Edit Confirm Menu Utilities Compilers Test Help
EDIT IBMMFS.MAC.JCLS(MERGE) Columns 00001 - 00072
****** ***************************** Top of Data **************************************
000001 //MERGE JOB 'IBMMFS','MAC',CLASS=A,MSGCLASS=X,NOTIFY=&SYSUID
000002 //STEP1 EXEC PGM=SORT <= REMEMBER NOT MERGE
000003 //SYSOUT DD SYSOUT=*
000004 //SORTIN01 DD DSN=IBMMFS.MAC.PS,DISP=SHR
000005 //SORTIN02 DD DSN=IBMMFS.MAC.PS1,DISP=SHR
000006 //SORTIN03 DD DSN=IBMMFS.MAC.PS2,DISP=SHR <= UPTO 99 DATASETS
000007 //SORTOUT DD DSN=IBMMFS.MAC.MERPS,DISP=SHR
000008 //SYSIN DD *
000009 MERGE FIELDS=(1,5,A,7,3,A),FORMAT=CH <='CAUSE EBCDIC IS COMMON
000010 /*
000011 //
****** **************************** Bottom of Data ************************************

Command ===> SUB Scroll ===> PAGE


F1=Help F3=Exit F5=Rfind F6=Rchange F12=Cancel
COPY JCL
File Edit Confirm Menu Utilities Compilers Test Help
EDIT IBMMFS.MAC.JCLS(DFCOPY) Columns 00001 - 00072
****** ***************************** Top of Data **************************************
000001 //SORT JOB 'IBMMFS','MAC',CLASS=A,MSGCLASS=X,NOTIFY=&SYSUID
000002 //STEP1 EXEC PGM=SORT
000003 //SYSOUT DD SYSOUT=*
000004 //SORTIN DD DSN=IBMMFS.MAC.PS,DISP=SHR
000005 //SORTOUT DD DSN=IBMMFS.MAC.COPYPS,DISP=SHR
000006 //SYSIN DD *
000007 SORT FIELDS=COPY <=O/P IS SAME AS I/P WITHOUT SORTING
000008 /*
000009 //
****** **************************** Bottom of Data ************************************

Command ===> SUB Scroll ===> PAGE


F1=Help F3=Exit F5=Rfind F6=Rchange F12=Cancel
SUMMATION JCL
File Edit Confirm Menu Utilities Compilers Test Help
EDIT IBMMFS.MAC.JCLS(DFSUM) Columns 00001 - 00072
****** ***************************** Top of Data **************************************
000001 //SORT JOB 'IBMMFS','MAC',CLASS=A,MSGCLASS=X,NOTIFY=&SYSUID
000002 //STEP1 EXEC PGM=SORT,PARM='NOLIST'
000003 //SYSOUT DD SYSOUT=*
000004 //SORTIN DD DSN=IBMMFS.MAC.PS,DISP=SHR
000005 //SORTWK01 DD UNIT=SYSDA,SPACE=(CYL,(1,1))
000006 //SORTOUT DD SYSOUT=*
000007 //SYSIN DD *
000008 SORT FIELDS=(10,2,BI,A) <= NEED ONLY FOR GROUP SUMMATION
000009 SUM FIELDS=(13,5,BI) <= ALL OTHER FIELDS ARE OMITTED
000010 /*
000011 //
****** **************************** Bottom of Data ************************************

Command ===> SUB Scroll ===> PAGE


F1=Help F3=Exit F5=Rfind F6=Rchange F12=Cancel
REFORMATTING JCL
File Edit Confirm Menu Utilities Compilers Test Help
EDIT IBMMFS.MAC.JCLS(DFFORM) Columns 00001 - 00072
****** ***************************** Top of Data **************************************
000001 //SORT JOB 'IBMMFS','MAC',CLASS=A,MSGCLASS=X,NOTIFY=&SYSUID
000002 //STEP1 EXEC PGM=SORT
000003 //SYSOUT DD SYSOUT=*
000004 //SORTIN DD DSN=IBMMFS.MAC.PS,DISP=SHR
000005 //SORTWK01 DD UNIT=SYSDA,SPACE=(CYL,(1,1)) <= IF NOT ENOUGH ADD MORE
000006 //SORTOUT DD DSN=IBMMFS.MAC.OUTPS,DISP=SHR
000007 //SYSIN DD *
000008 SORT FIELDS=(10,2,BI,A)
000009 OUTREC FIELDS=(10,2,4:C'NAME: ',X,1,10,60X) <= X INDICATE A SPACE
000010 /*
000011 //
****** **************************** Bottom of Data ************************************

Command ===> SUB Scroll ===> PAGE
SORT JCL
File Edit Confirm Menu Utilities Compilers Test Help
EDIT IBMMFS.MAC.JCLS(SORT) Columns 00001 - 00072
****** ***************************** Top of Data **************************************
000001 //SORT JOB 'IBMMFS','MAC',CLASS=A,MSGCLASS=X,NOTIFY=&SYSUID
000002 //STEP1 EXEC PGM=SORT,PARM='NOLIST'
000003 //SYSOUT DD SYSOUT=*
000004 //SORTIN DD DSN=IBMMFS.MAC.PS,DISP=SHR
000005 //SORTWK01 DD UNIT=SYSDA,SPACE=(CYL,(1,1)) <= IF NOT ENOUGH ADD MORE
000006 //SORTOUT DD DSN=IBMMFS.MAC.SORTPS,DISP=SHR
000007 //SYSIN DD *
000008 INCLUDE COND=(8,2,BI,GT,12,2,BI,OR,15,3,CH,EQ,C'MAC') <=SELECT COND
000009 SORT FIELDS=(1,5,CH,A,9,3,CH,D) <= DFSORT CONTROL STATEMENTS
000010 /*
000011 //
****** **************************** Bottom of Data ************************************

Command ===> SUB Scroll ===> PAGE


F1=Help F3=Exit F5=Rfind F6=Rchange F12=Cancel
MERGE JCL
File Edit Confirm Menu Utilities Compilers Test Help
EDIT IBMMFS.MAC.JCLS(MERGE) Columns 00001 - 00072
****** ***************************** Top of Data **************************************
000001 //MERGE JOB 'IBMMFS','MAC',CLASS=A,MSGCLASS=X,NOTIFY=&SYSUID
000002 //STEP1 EXEC PGM=SORT <= REMEMBER NOT MERGE
000003 //SYSOUT DD SYSOUT=*
000004 //SORTIN01 DD DSN=IBMMFS.MAC.PS,DISP=SHR
000005 //SORTIN02 DD DSN=IBMMFS.MAC.PS1,DISP=SHR
000006 //SORTIN03 DD DSN=IBMMFS.MAC.PS2,DISP=SHR <= UPTO 99 DATASETS
000007 //SORTOUT DD DSN=IBMMFS.MAC.MERPS,DISP=SHR
000008 //SYSIN DD *
000009 MERGE FIELDS=(1,5,A,7,3,A),FORMAT=CH <='CAUSE EBCDIC IS COMMON
000010 /*
000011 //
****** **************************** Bottom of Data ************************************

Command ===> SUB Scroll ===> PAGE


F1=Help F3=Exit F5=Rfind F6=Rchange F12=Cancel
COPY JCL
File Edit Confirm Menu Utilities Compilers Test Help
EDIT IBMMFS.MAC.JCLS(DFCOPY) Columns 00001 - 00072
****** ***************************** Top of Data **************************************
000001 //SORT JOB 'IBMMFS','MAC',CLASS=A,MSGCLASS=X,NOTIFY=&SYSUID
000002 //STEP1 EXEC PGM=SORT
000003 //SYSOUT DD SYSOUT=*
000004 //SORTIN DD DSN=IBMMFS.MAC.PS,DISP=SHR
000005 //SORTOUT DD DSN=IBMMFS.MAC.COPYPS,DISP=SHR
000006 //SYSIN DD *
000007 SORT FIELDS=COPY <=O/P IS SAME AS I/P WITHOUT SORTING
000008 /*
000009 //
****** **************************** Bottom of Data ************************************

Command ===> SUB Scroll ===> PAGE


F1=Help F3=Exit F5=Rfind F6=Rchange F12=Cancel
SUMMATION JCL
File Edit Confirm Menu Utilities Compilers Test Help
EDIT IBMMFS.MAC.JCLS(DFSUM) Columns 00001 - 00072
****** ***************************** Top of Data **************************************
000001 //SORT JOB 'IBMMFS','MAC',CLASS=A,MSGCLASS=X,NOTIFY=&SYSUID
000002 //STEP1 EXEC PGM=SORT,PARM='NOLIST'
000003 //SYSOUT DD SYSOUT=*
000004 //SORTIN DD DSN=IBMMFS.MAC.PS,DISP=SHR
000005 //SORTWK01 DD UNIT=SYSDA,SPACE=(CYL,(1,1))
000006 //SORTOUT DD SYSOUT=*
000007 //SYSIN DD *
000008 SORT FIELDS=(10,2,BI,A) <= NEED ONLY FOR GROUP SUMMATION
000009 SUM FIELDS=(13,5,BI) <= ALL OTHER FIELDS ARE OMITTED
000010 /*
000011 //
****** **************************** Bottom of Data ************************************

Command ===> SUB Scroll ===> PAGE


F1=Help F3=Exit F5=Rfind F6=Rchange F12=Cancel
REFORMATTING JCL
File Edit Confirm Menu Utilities Compilers Test Help
EDIT IBMMFS.MAC.JCLS(DFFORM) Columns 00001 - 00072
****** ***************************** Top of Data **************************************
000001 //SORT JOB 'IBMMFS','MAC',CLASS=A,MSGCLASS=X,NOTIFY=&SYSUID
000002 //STEP1 EXEC PGM=SORT
000003 //SYSOUT DD SYSOUT=*
000004 //SORTIN DD DSN=IBMMFS.MAC.PS,DISP=SHR
000005 //SORTWK01 DD UNIT=SYSDA,SPACE=(CYL,(1,1)) <= IF NOT ENOUGH ADD MORE
000006 //SORTOUT DD DSN=IBMMFS.MAC.OUTPS,DISP=SHR
000007 //SYSIN DD *
000008 SORT FIELDS=(10,2,BI,A)
000009 OUTREC FIELDS=(10,2,4:C'NAME: ',X,1,10,60X) <= X INDICATE A SPACE
000010 /*
000011 //
****** **************************** Bottom of Data ************************************

Command ===> SUB Scroll ===> PAGE

JCL for Merging Data Sets Directly


As in a sort, the JCL you need depends on whether you run DFSORT directly or call it from a program. This chapter only discusses running DFSORT directly.
The JCL needed for a merge is the same as that for a sort, with the following exceptions:
  • You do not need dynamic allocation of work data sets or SORTWKdd DD statements.
  • Instead of the SORTIN DD statement, you use SORTINnn DD statements to define the input data sets. The SORTINnn DD statements name the input data sets, and tell how many data sets will be merged. You need one SORTINnn DD statement for each data set being merged. nn in SORTINnnis a number from 00 to 99. Thus, if you wanted to merge 5 data sets, you would typically use DD statements for SORTIN01, SORTIN02, SORTIN03, SORTIN04 and SORTIN05.
To merge the pre-sorted bookstore data set and the data set containing the new records, code the following JCL statements for this example. The new data set is called A123456.NEW and the sorted version of the bookstore data set is called A123456.MASTER. For this example, it is assumed that the input data sets are cataloged and that the output data set will be cataloged.
//EXAMP    JOB  A492,PROGRAMMER
//MERGE    EXEC PGM=SORT
//SYSOUT   DD   SYSOUT=A
//SORTIN01 DD   DSN=A123456.MASTER,DISP=SHR
//SORTIN02 DD   DSN=A123456.NEW,DISP=SHR
//SORTOUT  DD   DSN=A123456.SORT.SAMPOUT,DISP=OLD
//SYSIN    DD   *
  MERGE  FIELDS=(110,5,CH,A,1,75,CH,A)
/*
In Calling DFSORT from a Program, you learn how to merge data sets when calling DFSORT from a program.

Sort and Merge Program


SORT
The SORT program is used to sort data into a certain sequence or to merge from 2 to 100 previously sorted input data sets into 1 output data set.
//STEP10 EXEC PGM=SORT
//SYSOUT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SORTIN DD DISP=SHR,DSN=<<>>
//SORTOUT DD DISP=(MOD,CATLG,DELETE),SPACE=(CYL,(5,5),RLSE),
// UNIT=SYSDA,DCB=*.SORTIN,
// DSN=<<>>
//SYSIN DD *
//************** INCLUDE SORT STEPS HERE
1) TO SORT ON POSITIONS say for eg. 1 to 7
SORT FIELDS=(1,7,CH,A)
Where
Sort fields = (position ,length ,format ,sequence)or
Sort fields = (position ,length , sequence..),format = CH/BI/PD/ZD.d
PD=packed Decimal(COMP-3), ZD=zone decimal.
NOTE :-
Instead of using JCL to perform SORT operation , there's one simple alternative,
For eg:- Open a Flat file in edit mode. On the command line type (say) SORT 1,7 and press ENTER, the file will be sorted on positions 1 to 7 bytes.
2) TO COPY ALL THE RECORDS FROM INPUT FILE TO OUTPUT FILE
SORT FIELDS=COPY
3) TO COPY THOSE RECORDS WHICH SATISFY A PARTICULAR CONDITION.
INCLUDE COND=(38,10,CH,EQ,C'57071509',OR,36,10,CH,EQ,C'57105779')
4) TO OMIT THOSE RECORDS WHICH SATISFY A PARTICULAR CONDITION.
OMIT COND=(19,1,CH,EQ,C'S',OR,19,1,CH,EQ,C'S')
5) TO SKIP CERTAIN NO OF RECORDS
SORT FIELDS=COPY,SKIPREC=1000
6) TO STOP AFTER COPYING CERTAIN NO OF RECORDS
SORT FIELDS=COPY,STOPAFT=5000
7) SKIPREC AND STOPREC CAN BE USED IN COMBINATION
SORT FIELDS=COPY,SKIPREC=1000,STOPAFT=5000
8) TO REMOVE DUPLICATES FROM THE FILE USING SORT
SORT FIELDS=(1,7,A),FORMAT=CH
SUM FIELDS=NONE

MERGE

The MERGE control statement defines the application as a MERGE application.
MERGE FIELDS=...
{,FILES=n}
{,EQUALS | NOEQUALS}
{,CKPT | CHKPT}
{,CENTWIN={0 | s | f}}
where
FIELDS=(pos1,len1,opt1,pos2,len2,opt2,...),FORMAT=type
Keyword explanations:
The FIELDS= keyword is used to identify the fields to use as merge keys. Each field is described using 4 values:
'pos', its position in the record, relative to 1;
'len', the field's length;
'type', the type of data stored in the field; and
'opt', the sort order for the field which can be
A for ascending, D for descending, or
E as modified by an E61 exit.
Up to 128 fields can be sorted or merged using one
MERGE control statement.

Instream Procedure Program in JCL

INSTREAM
//TRGA13QQ JOB NOTIFY=TRGA13                          
//PRO1NAME PROC  PROG=DISP                            
//STEP1 EXEC PGM=&PROG                                
//STEPLIB DD DSN=TRGA13.MOULI.LOADLIB,DISP=SHR        
//SYSPRINT DD SYSOUT=A                                
// PEND                                              
//PRO2NAME PROC                                      
//STEP2 EXEC PGM=DISP2                                
//STEPLIB DD DSN=TRGA13.MOULI.LOADLIB,DISP=SHR        
//SYSIN DD DSN=TRGA13.MOULI.DATAPS,DISP=SHR          
//SYSPRINT DD SYSOUT=A                                
// PEND                                              
//PRO3NAME PROC                                      
//STEP3 EXEC PGM=DISP2                                
//STEPLIB DD DSN=TRGA13.MOULI.LOADLIB,DISP=SHR        
//SYSPRINT DD SYSOUT=A                                
// PEND                                              
//FST   EXEC PRO1NAME            
//FST1  EXEC PRO1NAME,PROG=DISP1
//SEC   EXEC PRO2NAME            
//TRD   EXEC PRO3NAME            
//STEP3.SYSIN DD *              
    300.33                      
/*                              
//                                

Catalog procedure Program in JCL

1.CATALOG PROC
//PRO1NAME PROC                              
//STEP1 EXEC PGM=DISP                        
//STEPLIB DD DSN=TRGA13.MOULI.LOADLIB,DISP=SHR
//SYSPRINT DD SYSOUT=A                      
//                                          

            JCL
//TRGA13Y JOB  NOTIFY=TRGA13            
//PROC1   JCLLIB ORDER=(TRGA13.MOULI.PDS)
//STEP1   EXEC  CATPROC                
//SYSOUT DD SYSOUT=A                    
//
****************************************************************                
           2.CATALOG PROC
//PRO1NAME PROC                              
//STEP1 EXEC PGM=DISP2                        
//STEPLIB DD DSN=TRGA13.MOULI.LOADLIB,DISP=SHR
//SYSPRINT DD SYSOUT=A                      
//                                          

            JCL
//TRGA13Y JOB  NOTIFY=TRGA13            
//PROC1   JCLLIB ORDER=(TRGA13.MOULI.PDS)
//       EXEC  CATPROC                  
//SYSOUT DD SYSOUT=A                    
//STEP1.SYSIN DD *                      
   400.34                              
/*                                      
//                                        

GDG Program in JCL

GDG-GENERATION
//TRGA13QQ JOB NOTIFY=TRGA13                                  
//STEP1 EXEC PGM=IDCAMS                                      
//SYSIN DD *                                                  
   DEFINE GDG (NAME(TRGA13.MOULI.GDG.BACKUP) -                
   LIMIT(5) -                                                
   NOEMPTY SCRATCH)                                          
/*                                                            
//SYSPRINT DD SYSOUT=A                                        
//STEP2 EXEC PGM=IEFBR14                                      
//MODEL1 DD  DSN=TRGA13.MOULI.GDG.BACKUP,DISP=(NEW,KEEP,DELETE),
//           UNIT=SYSDA,SPACE=(TRK,0),                        
//           DCB=(RECFM=FB,LRECL=80,BLKSIZE=800)              
//                                                            
***********************************************************
             GDG-VERSION GENERATION
//TRGA13AA JOB NOTIFY=TRGA13                  
//STEP1 EXEC PGM=SORT                        
//SORTIN DD DSN=TRGA13.MOULI.PS,DISP=SHR      
//SORTOUT DD DSN=TRGA13.MOULI.GDG.BACKUP(+1),
//           DISP=(NEW,CATLG,DELETE),        
//           UNIT=SYSDA,                      
//           SPACE=(TRK,(1,5),RLSE),          
//           DCB=(TRGA13.MOULI.PSOUT)        
//SYSIN DD *                                  
    SORT FIELDS=(35,4,CH,A)                  
    SUM FIELDS=(73,6,ZD)                      
/*                                            
//SYSOUT DD SYSOUT=A                          
//                                            
***************************************************************
             GDG-PREVIOUS VERSION
//TRGA13AA JOB NOTIFY=TRGA13                      
//STEP1 EXEC PGM=SORT                              
//SORTIN DD DSN=TRGA13.MOULI.GDG.BACKUP(-1),DISP=SHR
                                                                               ==> (0)=CURRENT GDG VERSION
//SORTOUT  DD DSN=TRGA13.MOULI.PSOUT,DISP=OLD      
//SYSIN DD *                                      
    SORT FIELDS=COPY                              
/*                                                
//SYSOUT DD SYSOUT=A                              
//                                                
************************************************************
            GDG-DELETE
//TRGA13QQ JOB NOTIFY=TRGA13                
//STEP1 EXEC PGM=IDCAMS                      
//SYSIN DD *                                
   DELETE (TRGA13.MOULI.GDG.BACKUP) GDG FORCE
/*
//SYSPRINT DD SYSOUT=A
//

VSAM Creation Programe in JCL

VSAM-KSDS-CREATION
//TRGA13WW JOB NOTIFY=TRGA13                        
//STEP1 EXEC PGM=IDCAMS                            
//SYSPRINT DD SYSOUT=A                              
//SYSIN DD *                                        
   DEFINE CLUSTER (NAME(TRGA13.MOULI.KSDS.CLUST) -  
   VOLUME(WORK06) -                                
   TRACKS(1,2) -                                    
   CONTROLINTERVALSIZE(1024) -                      
   FREESPACE(5,5) -                                
   KEYS(4,0) -                                      
   RECORDSIZE(134,134)) -                          
   DATA(NAME(TRGA13.MOULI.KSDS.DATA)) -            
   INDEX(NAME(TRGA13.MOULI.KSDS.INDEX) -            
   CONTROLINTERVALSIZE(1024))                      
/*                                                  
//                                                  
*******************************************************
         VSAM TO NON-VSAM
//TRGA13AA JOB NOTIFY=TRGA13                      
//STEP1 EXEC PGM=IDCAMS                            
//INDD   DD DSN=TRGA13.MOULI.KSDS.CLUST,DISP=SHR  
//OUTDD    DD DSN=TRGA13.MOULI.PSOUT,DISP=OLD      
//SYSIN DD *                                      
    REPRO -                                        
    INFILE(INDD) -                                
    OUTFILE(OUTDD)                                
/*                                                
//SYSPRINT DD SYSOUT=A                            
//                                                
***********************************************************
           VSAM TO NON-VSAM
//TRGA13AA JOB NOTIFY=TRGA13                      
//STEP1 EXEC PGM=IDCAMS                          
//INDD   DD DSN=TRGA13.MOULI.KSDS.CLUST,DISP=SHR  
//OUTDD    DD DSN=TRGA13.MOULI.PS,DISP=OLD        
//SYSIN DD *                                      
    REPRO -                                      
    INFILE(INDD) -                                
    OUTFILE(OUTDD) -                              
    FROMKEY(1002) TOKEY(1004)                    
/*                                                
//SYSPRINT DD SYSOUT=A                            
//                                                

VSAM Modified Command Program's

 LISTCAT-VSAM
//TRGA13AA JOB NOTIFY=TRGA13                      
//STEP1 EXEC PGM=IDCAMS                            
//SYSIN DD *                                      
    LISTCAT ENTRIES(TRGA13.MOULI.KSDS.CLUST) ALL  
//SYSPRINT DD SYSOUT=A                            
//                      
******************************************************************
               VSAM-PATH 
//TRGA13QW JOB NOTIFY=TRGA13                  
//STEP1 EXEC PGM=IDCAMS                      
//SYSPRINT DD SYSOUT=A                        
//SYSIN DD *                                  
    DEFINE PATH(NAME(TRGA13.MOULI.KSDS.PATH) -
    PATHENTRY(TRGA13.MOULI.AIX.CLUST) -      
    UPDATE)                                  
/*                                            
//                                            
*******************************************************************
            ALTER - VSAM NAME
//TRGA13QQ JOB NOTIFY=TRGA13                
//STEP1 EXEC PGM=IDCAMS                    
//SYSPRINT DD SYSOUT=A                      
//SYSIN DD *                                
    ALTER -                                
    TRGA13.MOULI.KSDS1.CLUST1 -            
    NEWNAME(TRGA13.MOULI.KSDS.CLUST)        
/*                                          
//                                          
*****************************************************************
            ALTER - VSAM FRESPACE(ONLY DATA)
//TRGA13QQ JOB NOTIFY=TRGA13          
//STEP1 EXEC PGM=IDCAMS              
//SYSPRINT DD SYSOUT=A                
//SYSIN DD *                          
    ALTER TRGA13.MOULI.KSDS.DATA -    
    FREESPACE(8,8)                    
/*                                    
//                                    
**************************************************************
             VSAM-REPLACE
//TRGA13QQ JOB NOTIFY=TRGA13                
//STEP1 EXEC PGM=IDCAMS                      
//SYSPRINT DD SYSOUT=A                      
//SYSIN DD *                                
    REPRO -                                  
      INDATASET(TRGA13.MOULI.PSOUT) -        
      OUTDATASET(TRGA13.MOULI.KSDS.CLUST) -  
      REPLACE                                
/*                                          
//                                          
****************************************************************
                        VSAM - REUSE
//TRGA13QQ JOB NOTIFY=TRGA13                
//STEP1 EXEC PGM=IDCAMS                    
//SYSPRINT DD SYSOUT=A                      
//SYSIN DD *                                
    REPRO -                                
      INDATASET(TRGA13.MOULI.PSOUT) -      
      OUTDATASET(TRGA13.MOULI.KSDS.CLUST) -
      REUSE                                
/*                                          
//

The JCL for the report-preparation application

//MM01RP   JOB  36512,'A PRINCE',MSGCLASS=X,MSGLEVEL=(1,1),
//             NOTIFY=MM03
//SORT1    EXEC PGM=SORT
//SYSOUT   DD   SYSOUT=*
//SORTIN   DD   DSNAME=MM01.ACCOUNT.MASTER,DISP=SHR
//SORTOUT  DD   DSNAME=MM01.ACCOUNT.MASTER.SORT,DISP=(NEW,KEEP),
//             UNIT=SYSDA,VOL=SER=MPS800,
//             SPACE=(CYL,(1,1)),
//             DCB=(DSORG=PS,RECFM=FB,LRECL=400)
//SORTWK01 DD   UNIT=SYSDA,VOL=SER=MPS800,
//             SPACE=(CYL,(1,1))
//SYSIN    DD   *
 SORT   FIELDS=(16,5,CH,A,1,5,CH,A)
/*
//AR7100   EXEC PGM=AR7100
//ARSORT   DD   DSNAME=MM01.ACCOUNT.MASTER.SORT,DISP=(OLD,DELETE),
//             UNIT=SYSDA,VOL=SER=MPS800
//CUSTMAST DD   DSNAME=MM01.CUSTOMER.MASTER,DISP=SHR
//DUNNING  DD   DSNAME=MM01.DUNNING.FILE,DISP=(NEW,KEEP),
//             UNIT=SYSDA,VOL=SER=MPS800,
//             SPACE=(CYL,(1,1)),
//             DCB=(DSORG=PS,RECFM=FB,LRECL=400)
//AR7200   EXEC PGM=AR7200
//DUNNING  DD   DSNAME=MM01.DUNNING.FILE,DISP=OLD,
//             UNIT=SYSDA,VOL=SER=MPS800
//ATB      DD   SYSOUT=*
//OVERDUE  DD   SYSOUT=*
//SORT2    EXEC PGM=SORT
//SYSOUT   DD   SYSOUT=*
//SORTIN   DD   DSNAME=MM01.DUNNING.FILE,DISP=(OLD,DELETE),
//             UNIT=SYSDA,VOL=SER=MPS800,
//SORTOUT  DD   DSNAME=MM01.DUNNING.FILE.SORT,DISP=(NEW,KEEP),
//             UNIT=SYSDA.VOL=SER=MPS800,
//             SPACE=(CYL,(1,1))
//             DCB=(DSORG=PS,RECFM=FB,LRECL=400)
//SORTWK01 DD   UNIT=SYSDA,VOL=SER=MPS800,
//             SPACE=(CYL,(1,1))
//SYSIN    DD   *
 SORT   FIELDS=(43,2,CH,A,1,5,CH,A,50,5,CH,A)
/*
//AR7300   EXEC PGM=AR7300
//DUNSORT  DD   DSNAME=MM01.DUNNING.FILE.SORT,DISP=(OLD,DELETE),
//             UNIT=SYSDA,VOL=SER=MPS800
//XREF     DD   SYSOUT=*
//STMTS    DD   SYSOUT=*

How to use JCL facilities to allocate other types of DASD data sets

1.Allocating a single-step temporary data set (a work file)
Example 1
//WORK1    DD   UNIT=SYSDA,SPACE=(CYL,(10,5))
Allocates a temporary data set on a SYSDA volume using 10 cylinders of primary and 5 cylinders of secondary space. DISP=(NEW,DELETE) is assumed.

Example 2
//WORK2    DD   UNIT=SYSDA,DISP=(NEW,DELETE),
//             SPACE=(3200,(500,500)),
//             DCB=LRECL=120
Allocates a temporary data set on a SYSDA volume using 500 blocks of primary and secondary space. DISP=(NEW,DELETE) is specified, but could be omitted since it’s the default. The record length is 120 bytes.

2.A two-step job that uses temporary data sets
//MM01RN   JOB  (36512),'R MENENDEZ',MSGCLASS=X,MSGLEVEL=(1,1),
//             CLASS=A,NOTIFY=&SYSUID
//SORT     EXEC PGM=SORT
//SYSOUT   DD   SYSOUT=*
//SORTIN   DD   DSNAME=MMA2.AR.CUSTOMER.MASTER,DISP=SHR
//SORTWK01 DD   UNIT=SYSDA,SPACE=(TRK,(1,1))
//SORTWK02 DD   UNIT=SYSDA,SPACE=(TRK,(1,1))
//SORTWK03 DD   UNIT=SYSDA,SPACE=(TRK,(1,1))
//SORTOUT  DD   DSNAME=&&SORTCUST,DISP=(NEW,PASS),
//             UNIT=SYSDA,SPACE=(TRK,(1,1))
//SYSIN    DD   *
 SORT FIELDS=(2,13,A,20,1,A),FORMAT=CH
/*

//REPORT   EXEC PGM=CUSTLST
//SYSOUT   DD   SYSOUT=*
//CUSTMAST DD   DSNAME=&&SORTCUST,DISP=(OLD,DELETE)
//ATB      DD   SYSOUT=*
//SYSUDUMP DD   SYSOUT=*

3.Examples of VIO temporary data sets
Example 1
//TEMP1    DD   UNIT=VIO
The data set is defined as a VIO temporary work file that’s deleted at the end of the job step.

Example 2
//DD1      DD   UNIT=SYSDA,SPACE=(1000,(10,50)),
//             DCB=(RECFM=FB,LRECL=40)
If enough VIO space is available during the execution of the job step, the system will define the file as a VIO temporary data set. Otherwise, it’ll be defined as a DASD temporary data set. In either case, it’s deleted at the end of the job step.

Example 3
//SORTOUT  DD   DSNAME=&&PRODCD,DISP=(NEW,PASS),
//             UNIT=SYSDA,SPACE=(1000,(20,70))
&&PRODCD will be defined as a VIO or DASD temporary data set, depending on the available VIO space. In either case, DISP=(NEW,PASS) will allow the data set to be available to subsequent job steps.

4.Allocating a dummy data set
Example 1
//SYSIN    DD   DUMMY
Allocates a dummy data set. OS/390 simulates input and output processing, but no I/O operations are actually performed.

Example 2
//CUSTMAST DD   DUMMY,AMP=AMORG
Allocates a dummy VSAM data set.

Example 3
//TRANFILE DD   DUMMY,DSNAME=AR.TRANS.FILE,DISP=(NEW,KEEP),
//             UNIT=SYSDA,VOL=SER=MPS800,
//             SPACE=(CYL,(5,1)),
//             DCB=(DSORG=PS,RECFM=FB,LRECL=80)
Allocates a dummy data set using the specified file characteristics. When the DUMMY parameter is removed, this DD statement will allocate an actual data set.

Example 4
//TRANFILE DD   DSNAME=NULLFILE,DISP=(NEW,KEEP),
//             UNIT=SYSDA,VOL=SER=MPS800,
//             SPACE=(CYL,(5,1)),
//             DCB=(DSORG=PS,RECFM=FB,LRECL=80)
Allocates a dummy data set using the specified file characteristics. When NULLFILE is changed to a data set name, this DD statement will allocate an actual data set.

How to Conatenating Data Sets in JCL

Concatenating data sets
Example 1
//TRANS    DD   DSNAME=MMA1.TRANS.WEEK1,DISP=SHR
//         DD   DSNAME=MMA1.TRANS.WEEK2,DISP=SHR
//         DD   DSNAME=MMA1.TRANS.WEEK3,DISP=SHR
Allocates three sequential transaction files, processing them one after the other in the sequence in which they’re listed.

Example 2
//SYSLIB   DD   DSNAME=MMA1.COBOL.OBJLIB,DISP=SHR
//         DD   DSNAME=SYS1.COBLIB,DISP=SHR
Allocates two partitioned data sets, searching their directories in the order in which they’re listed.

Example 3
//SYSUT1   DD   DSNAME=MM01.TEXT,DISP=OLD,
//             UNIT=TAPE,VOL=SER=M00023
//         DD   DSNAME=MM01.ACCTG.DATA(ARMAST),DISP=SHR
//         DD   *
  (input data records)
/*
Allocates three files, processing them in the sequence in which they’re listed: first the tape file, then the partitioned data set member, and finally, the instream data set.

How to Allocating a Multi-volume Data Sets in JCL

Allocating a multi-volume data set
Example 1
//CUSTMAST DD   DSNAME=MMA1.CUSTOMER.MASTER,DISP=(NEW,KEEP),
//             UNIT=SYSDA,VOL=SER=(MVS300,MVS301,MVS302),
//             SPACE=(CYL,(400,200))
Allocates a multi-volume uncataloged data set that uses DASD volumes MVS300, MVS301, and MVS302.

Example 2
//CUSTMAST DD   DSNAME=MMA1.CUSTOMER.MASTER,DISP=(NEW,CATLG),
//             UNIT=(SYSDA,3),SPACE=(CYL,(400,200))
Allocates a multi-volume cataloged data set that uses three DASD volumes chosen by the system.

How to use Rlse and Round Subparameter in JCL

DD statements that use the RLSE subparameter
Example 1
//EMPMAST  DD   DSNAME=MMA1.EMPLOYEE.MASTER,DISP=(,CATLG,DELETE),
//             UNIT=SYSDA,SPACE=(TRK,(400,100),RLSE)
The initial space allocation is 400 tracks of primary space and 100 tracks of secondary space. Any unused tracks are released if the job step ends normally.

Example 2
//INVMAST  DD   DSNAME=MMA1.INVENTORY.MASTER,DISP=(,CATLG,DELETE),
//             UNIT=SYSDA,VOL=SER=(MVS300,MVS301,MVS302),
//             SPACE=(CYL,(100,20),RLSE)

The initial space allocation for this multi-volume data set is 100 cylinders of primary space and 20 cylinders of secondary space. Any unused cylinders on the last volume used are released if the job step ends normally.

A DD statement that uses the ROUND subparameter
//INSMAST  DD   DSNAME=MMA1.INSURANCE.MASTER,DISP=(,CATLG,DELETE),
//             UNIT=SYSDA,SPACE=(3200,(5000,1000),,,ROUND)
Allocates the space, which is specified in terms of 3200-byte blocks, in units of whole cylinders.