Chapter 4 The basics of Job Control Language Murach’s OS/390 and z/OS JCL © 2002, Mike Murach & Associates, Inc. Chapter 4, Slide 1 Objectives Applied objectives Code a valid JOB statement using the format required by your installation. Code an EXEC statement to invoke a program and pass a parameter value to it. Code a DD statement for the following DASD data sets: a. an existing cataloged data set b. an existing uncataloged data set c. a new non-VSAM data set Code the JCL and data for an instream data set. The data may or may not include JCL statements. Code a DD statement for a SYSOUT data set. Given complete specifications for a job, code its JCL using the statements presented in this chapter. Murach’s OS/390 and z/OS JCL Chapter 4, Slide 2 Objectives (continued) Knowledge objectives Describe the basic format of a JCL statement. Describe the rules you must follow when coding a name in the name field. Distinguish between positional and keyword parameters. Describe how to code subparameters. Describe how to continue JCL statements onto additional lines. Describe how to code comments in a job stream. Describe the purpose of the DISP parameter in a DD statement. Describe the purposes of the UNIT, VOLUME, and SPACE parameters in a DD statement. Describe the purpose of the DCB parameter in a DD statement. Murach’s OS/390 and z/OS JCL Chapter 4, Slide 3 Common job control language statements JOB EXEC Identifies a job and supplies accounting information. Identifies a job step by indicating the name of the program to be executed. DD Identifies a data set to be allocated for the job step. delimiter (/*) Marks the end of an instream data set. null (//) Marks the end of a job. comment (//*) Provides comments. Murach’s OS/390 and z/OS JCL Figure 4-01a Chapter 4, Slide 4 Additional JCL statements Supplies options for SYSOUT processing. Marks the beginning of a procedure. Marks the end of a procedure. Identifies a private procedure library. Copies statements from another library member into the job. Sets default values for symbolic variables. SET IF/THEN/ELSE/ENDIF Provides conditional execution of a job step. COMMAND Identifies an MVS or JES command that is to be issued when the job runs. OUTPUT PROC PEND JCLLIB INCLUDE Murach’s OS/390 and z/OS JCL Figure 4-01b Chapter 4, Slide 5 A multi-step job Job Job steps steps //MM01A //STEP1 //FILEA //FILEB //STEP2 //FILEB //FILEC //REPORTA // Murach’s OS/390 and z/OS JCL JOB 36512 EXEC PGM=PROGA DD DSNAME=MM01.CUSTOMER.MASTER,DISP=SHR DD DSNAME=MM01.CUSTOMER.LIST,DISP=(NEW,KEEP) EXEC PGM=PROGB DD DSNAME=MM01.CUSTOMER.LIST,DISP=(OLD,DELETE) DD DSNAME=MM01.CUSTOMER.INVOICE,DISP=SHR DD SYSOUT=* Figure 4-01c Chapter 4, Slide 6 The basic format for JCL statements identifier [name] [operation] [parameters] [comments] Identifier field Name field //MM01A //POST //CUSTTRAN //CUSTMAST //TRANJRNL //ERRLIST // Murach’s OS/390 and z/OS JCL Operation field JOB EXEC DD DD DD DD Parameters field 36512,'R. MENENDEZ',NOTIFY=MM01 PGM=CM3000 DSNAME=MM01.CUSTOMER.TRANS,DISP=SHR DSNAME=MM01.CUSTOMER.MASTER,DISP=SHR SYSOUT=* SYSOUT=* Figure 4-02a Chapter 4, Slide 7 JCL statement formatting notes JCL statements are coded in 80-byte records although only 72 bytes are available for JCL code. Each statement can be logically divided into five fields. The identifier field starts in column 1 and for all standard JCL statements is two slashes (//). Immediately following the identifier field is the name field. The operation, parameters, and comment fields can be coded in a freeform style as long as there’s at least one blank space between these fields. Murach’s OS/390 and z/OS JCL Figure 4-02b Chapter 4, Slide 8 Positional parameters //MM01A JOB 36512,'R MENENDEZ' //MM01A JOB ,'R MENENDEZ' Keyword parameters //CUSTMAST DD DSNAME=MM01.CUSTOMER.MASTER,DISP=SHR Keyword and positional parameter combinations //CUSTMAST DD // // // DSNAME=MM01.CUSTOMER.MASTER,DISP=(,CATLG,DELETE), UNIT=SYSDA,VOL=SER=MPS800, SPACE=(CYL,(10,5,2)), DCB=DSORG=PO //DUNNING // // // DSNAME=MM01.DUNNING.FILE,DISP=(NEW,KEEP), UNIT=SYSDA,VOL=SER=MPS800, SPACE=(CYL,(1,1)), DCB=(DSORG=PS,RECFM=FB,LRECL=400) DD Murach’s OS/390 and z/OS JCL Figure 4-03a Chapter 4, Slide 9 Parameter coding rules The parameters field begins at least one position after the end of the operation field and can extend into column 71. There are two types of parameters: positional and keyword. Positional parameters are interpreted based on their position on the parameters field. Omitted parameters are marked by a comma. Keyword parameters are interpreted based on a keyword followed by an equals sign and a value. They can be coded in any order. Code positional parameters first in the parameters field, before any keyword parameters. All parameters must be separated by commas, not blanks. The end of a parameters field is marked by a blank. Parameters containing blanks or special characters must be enclosed in apostrophes. Murach’s OS/390 and z/OS JCL Figure 4-03b Chapter 4, Slide 10 Subparameter coding rules Subparameters are coded the same way as parameters and can also be positional or keyword. If you code more than one subparameter for a parameter, enclose the list in parentheses. Murach’s OS/390 and z/OS JCL Figure 4-03c Chapter 4, Slide 11 Two ways to continue a JCL statement on more than one line Code as many parameters on one line as possible //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) Code only one or two parameters per line //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) Murach’s OS/390 and z/OS JCL Figure 4-04a Chapter 4, Slide 12 Two ways to code comments in a job The comments field of a JCL statement //MM01A //POST //CUSTTRAN //CUSTMAST //TRANJRNL JOB EXEC DD DD DD 36512,MENENDEZ,NOTIFY=MM01 PGM=CM3000 **Post cust transactions** DSNAME=MM01.CUSTOMER.TRANS,DISP=SHR DSNAME=MM01.CUSTOMER.MASTER,DISP=SHR SYSOUT=* The JCL comment statement //MM01RP JOB 36512,'A PRINCE',MSGCLASS=X,MSGLEVEL=(1,1) //********************************************************* //* Prepare past-due reports from DUNNING file * //********************************************************* //AR7200 EXEC PGM=AR7200 //DUNNING DD DSNAME=MM01.DUNNING.FILE,DISP=OLD, // UNIT=SYSDA,VOL=SER=MPS800 //ATB DD SYSOUT=* //OVERDUE DD SYSOUT=* Murach’s OS/390 and z/OS JCL Figure 4-04b Chapter 4, Slide 13 The syntax of the JOB statement //jobname JOB [ [ [ [ accounting-information ] [,programmer-name ] ,MSGCLASS=class ] ,MSGLEVEL=(stmt,msg) ] ,NOTIFY=user-id ] Explanation accounting-information Specifies an account number or other accounting information. programmer-name Identifies the owner of the job. MSGCLASS Specifies a single-character output class to be used for the job’s message output. MSGLEVEL Controls which JCL statements and system messages are produced by the job. NOTIFY Specifies the TSO/E user to be notified when the job completes. Murach’s OS/390 and z/OS JCL Figure 4-05a Chapter 4, Slide 14 JOB statement examples //PAY40B1 JOB MMA2AB14 //PAY40B2 JOB (MMA-001,'06/11/02',206),MENENDEZ,MSGCLASS=A //PAY40B3 JOB ,MENENDEZ,MSGCLASS=A //PAY40B4 JOB MSGCLASS=A,MSGLEVEL=(0,0),NOTIFY=MM01 A member named JOBCARD that contains a generic JOB statement //MM01XXXX JOB 36512,'R MENENDEZ', // MSGCLASS=X,MSGLEVEL=(1,1),NOTIFY=MM01 Murach’s OS/390 and z/OS JCL Figure 4-05b Chapter 4, Slide 15 Rules for coding the name field of a JCL statement A name must start in column 3 of a JCL statement and must be followed by at least one blank. It can be from one to eight characters long, consisting of alphanumeric (A-Z and 0-9) and national (@,$,#) characters. The first character must be alphabetic or national. Valid job names //MM01A //CS0166PR //$PSP06B Invalid job names // MM01C Doesn’t start in column 3 //(ABCDE) Starts with an invalid character //PR_001 Contains an invalid character //PAYMENT805 Contains more than 8 characters Murach’s OS/390 and z/OS JCL Figure 4-06 Chapter 4, Slide 16 Five JOB statements that use the programmer name parameter //MM01A JOB 36512,RMENENDEZ //MM01B JOB ,R.MENENDEZ //MM01C JOB ,'R MENENDEZ' //MM01D JOB 36512,'O''Brien' //MM01E JOB ,DEPT-10 Two ways to code the NOTIFY parameter //MM01A JOB 36512,LOWE,NOTIFY=MM01 //MM01B JOB 36512,LOWE,NOTIFY=&SYSUID The message returned to your TSO/E terminal when the job completes 17.35.12 JOB02169 $HASP165 MM01B ENDED AT DDC1NJE MAXCC=0 CN(INTERNAL) *** Murach’s OS/390 and z/OS JCL Figure 4-07 Chapter 4, Slide 17 The syntax of the MSGCLASS parameter MSGCLASS=class Explanation class Identifies the output class for the job log. The class can only be one character long (A-Z or 0-9) and must be a valid output class specified at JES initialization. The syntax of the MSGLEVEL parameter MSGLEVEL=(stmt,msg) Explanation stmt msg A single digit that specifies which JCL statements should be printed. 0 Print only the JOB statement. 1 Print only JCL statements. 2 Print only JCL statements submitted through the input stream. A single digit that specifies which system messages should be printed. 0 Print step completion messages only. 1 Print all messages (the default). Murach’s OS/390 and z/OS JCL Figure 4-08a Chapter 4, Slide 18 A JOB statement with both the MSGCLASS and MSGLEVEL parameters //MM01A JOB 36512,'R MENENDEZ',MSGCLASS=X,MSGLEVEL=(0,0) MSGCLASS and MSGLEVEL are typically coded together on a JOB statement. Murach’s OS/390 and z/OS JCL Figure 4-08b Chapter 4, Slide 19 The syntax of the EXEC statement //stepname EXEC PGM=program-name [ ,PARM=information ] Explanation PGM PARM Specifies the name of the program to be executed for this job step. Optional; specifies information that’s passed to the program. EXEC statement facts The EXEC statement executes a program or invokes a procedure for each step. The program specified in the PGM parameter must be a linkedited load module member of a partitioned data set. The PARM parameter lets you pass information to the program specified in the PGM parameter. Any information coded into the PARM field is programdependent. Murach’s OS/390 and z/OS JCL Figure 4-09a Chapter 4, Slide 20 Examples of the EXEC statement An EXEC statement that executes program PAY5B10 in step PAYLIST //PAYLIST EXEC PGM=PAY5B10 An EXEC statement that passes a parameter value of LINECT=0050 to program IEBDG //DATAGEN EXEC PGM=IEBDG,PARM='LINECT=0050' An EXEC statement that passes three parameters to program HEWL //LINKED EXEC PGM=HEWL,PARM='LET,MAP,XREF' Murach’s OS/390 and z/OS JCL Figure 4-09b Chapter 4, Slide 21 The syntax of the DD statement for DASD data sets //ddname DD DSNAME=data-set-name ,DISP=(status,normal-disp,abnormal-disp) [ ,UNIT=unit ] [ ,VOL=SER=serial-number ] [ ,SPACE=unit,(primary-qty,secondary-qty,dir) ] [ ,DCB=(option,option...) ] Explanation DSNAME Specifies the file’s data set name. DISP Specifies the file’s status and normal and abnormal disposition. UNIT Specifies a group name, device type, or device number that identifies the device where the file resides. VOL=SER Specifies the six-character volume serial number of the volume that contains the file. SPACE Specifies the DASD space to be allocated for the file. DCB Specifies options to be used for the file’s data control block. Murach’s OS/390 and z/OS JCL Figure 4-10a Chapter 4, Slide 22 Examples of the DD statement A DD statement that allocates an existing data set //INVMAST DD DSNAME=MM01.INVNTORY.MASTER,DISP=SHR A DD statement that allocates a new data set //INVMAST // // // Murach’s OS/390 and z/OS JCL DD DSNAME=MM01.ACCOUNT.MASTER,DISP=(NEW,CATLG), UNIT=SYSDA,VOL=SER=MPS8BV, SPACE=(CYL,(10,2)), DCB=(DSORG=PS,RECFM=FB,LRECL=100) Figure 4-10b Chapter 4, Slide 23 The syntax of the DSNAME parameter {DSNAME} {DSN} = {data-set-name} {data-set-name(member)} Different ways to code the DSNAME parameter A DD statement that accesses a sequential data set //INVMAST DD DSNAME=MM01.INVMAST.DATA,DISP=SHR A DD statement that accesses a PDS member //INVTRAN DD DSN=MM01.INV.DATA(TRANS),DISP=SHR DSNAME facts The DSNAME parameter is required on a DD statement for a permanent data set. The DSNAME parameter is optional for temporary data sets. Murach’s OS/390 and z/OS JCL Figure 4-11a Chapter 4, Slide 24 Reserved ddnames used by the operating system JCBIN BCBLOCK JCBTAB JESInnnn JESJCL JESJCLIN JESMSGLG JESYSMSG JOBCAT JOBLIB JOURNAL JST JS3CATLG J3JBINFO J3SCINFO J3STINFO STCINRDR STEPCAT STEPLIB SYSCHK SYSIN SYSABEND SYSCKEOV SYSMDUMP SYSUDUMP TSOINRDR Ddname facts The ddname is a symbolic name that the program specified in the EXEC statement uses to refer to a data set. Each ddname should be unique within the job step. Some ddnames have special meaning to the system and therefore cannot be used to identify data sets in a processing program. Murach’s OS/390 and z/OS JCL Figure 4-11b Chapter 4, Slide 25 The syntax of the DISP parameter DISP=(status,normal-disp,abnormal-disp) Status NEW OLD SHR MOD The data set does not exist and should be created. The data set exists and should be allocated for exclusive use. The data set exists and should be allocated for shared use. The data set is allocated for exclusive use and is positioned at the end of the data, so additional records may be added after the last record. Normal and abnormal disposition DELETE The data set is deleted. If it was retrieved from the catalog, it is also uncataloged. KEEP The data set is retained. CATLG The data set is retained and a catalog entry is made. UNCATLG The data set is retained, but its catalog entry is removed. PASS Normal disposition only. The data set is retained for use by a later job step. Murach’s OS/390 and z/OS JCL Figure 4-12a Chapter 4, Slide 26 DISP parameter default values status normal disposition abnormal disposition If omitted, NEW is assumed. Depends on the value specified or assumed for status: if NEW, normal disposition is DELETE; if OLD, SHR, or MOD, normal disposition is KEEP. Takes on the value specified or assumed for normal disposition. Examples of the DISP parameter The data set is allocated for shared access, and the normal and abnormal dispositions default to KEEP DISP=SHR The new data set is cataloged if the job step ends normally; otherwise, it’s deleted DISP=(,CATLG,DELETE) Murach’s OS/390 and z/OS JCL Figure 4-12b Chapter 4, Slide 27 The syntax of the UNIT parameter UNIT= {group-name} {device-type} {device-number} Explanation group-name Specifies a group name that identifies devices that belong to categories set up by the installation. SYSDA and TAPE are commonly used group names. SYSDA typically refers to any DASD unit that’s available for public use, and TAPE refers to any available tape drive. device-type Specifies a device by its machine type or model. For example, if you specify UNIT=3390, a 3390 device is used. device-number Specifies a device by a three- or four-digit hexadecimal address. A four-digit number must be preceded by a slash (/), as in UNIT=/2301. Murach’s OS/390 and z/OS JCL Figure 4-13a Chapter 4, Slide 28 The syntax of the VOLUME parameter {VOLUME=}SER=serial-number {VOL=} Explanation serial-number Specifies which volume you want to allocate for your data set. If omitted, MVS scans for eligible volumes based on the UNIT parameter. A DD statement that uses the UNIT and VOLUME parameters //INVMAST // DD Murach’s OS/390 and z/OS JCL DSNAME=MM01.INVNTORY.MASTER,DISP=(NEW,CATLG), UNIT=SYSDA,VOL=SER=MPS8BV,... Figure 4-13b Chapter 4, Slide 29 The syntax of the SPACE parameter SPACE= (unit,(primary-qty,secondary-qty[,dir])) Explanation unit primary-qty secondary-qty dir Specifies the unit used to allocate space to the data set, as follows: TRK Allocates space in tracks. CYL Allocates space in cylinders. blklgth Allocates space in blocks, with the block size given in bytes. reclgth Allocates space based on the average record length in bytes. Specifies the number of units to be initially allocated to the file. Specifies the number of units to be allocated to each secondary extent. Specifies the number of directory blocks to allocate for a partitioned data set. Murach’s OS/390 and z/OS JCL Figure 4-14a Chapter 4, Slide 30 Examples of the SPACE parameter Example 1 SPACE=(CYL,(4,1,5)) Primary: Secondary: Directory: Example 2 4 cylinders 1 cylinder 5 blocks SPACE=(TRK,(5,2)) Primary: Secondary: Example 3 5 tracks 2 tracks SPACE=(800,(500,100)) Primary: Secondary: Murach’s OS/390 and z/OS JCL 500 800 byte blocks 100 800 byte blocks Figure 4-14b Chapter 4, Slide 31 The syntax of the DCB parameter DCB=(option,option...) Commonly used DCB options DSORG=x RECFM=x LRECL=n BLKSIZE=n Specifies the data set’s organization, as follows: PS Physical sequential PO Partitioned DA Direct IS Indexed sequential Specifies the format of the file’s records, as follows: F Fixed length, unblocked FB Fixed length, blocked V Variable length, unblocked VB Variable length, blocked VBS Variable length, blocked, spanned U Undefined Specifies the length of the file’s records. Specifies the length of the file’s blocks; for FB, BLKSIZE is normally a multiple of LRECL. Murach’s OS/390 and z/OS JCL Figure 4-15a Chapter 4, Slide 32 Examples of the DCB parameter A DCB parameter for a sequential file with fixed-length records of 133 bytes DCB=(DSORG=PS,RECFM=F,LRECL=133) DD parameters for a file with variable-length records up to 500 bytes long RECFM=VB,LRECL=500 Murach’s OS/390 and z/OS JCL Figure 4-15b Chapter 4, Slide 33 The syntax of the DD statement for instream data sets //ddname DD {*} {DATA} [ ,DLM=xx ] Explanation * or DATA Indicates that instream data follows. If you code an asterisk, the next JCL statement ends the data. If you code DATA, you must include a delimiter statement to end the data. DLM Specifies the characters that identify a delimiter statement. If omitted, slashasterisk (/*) is the default. Murach’s OS/390 and z/OS JCL Figure 4-16a Chapter 4, Slide 34 Two examples of coding instream data Example 1 //INVTRAN DD * A00101005995CH445 A00103010030CH445 A00272001950CJ550 /* Example 2 //SYSIN DD DATA,DLM=## //INVTRAN DD * A00101005995CH445 A00103010030CH445 A00272001950CJ550 /* ## Note: The shading indicates the records that are processed as data for the instream data set. Murach’s OS/390 and z/OS JCL Figure 4-16b Chapter 4, Slide 35 The syntax of the DD statement for SYSOUT data //ddname DD SYSOUT=x Explanation SYSOUT Specifies a one-character output class to be associated with the SYSOUT data set. If you code an asterisk, the output class specified in the MSGCLASS parameter of the JOB statement is used. Two ways to code the SYSOUT parameter A JES SYSOUT file with an output class of A //SYSPRINT DD SYSOUT=A A JES SYSOUT file with an output class that defaults to the output class specified by MSGCLASS in the JOB statement //INVRPT Murach’s OS/390 and z/OS JCL DD SYSOUT=* Figure 4-17 Chapter 4, Slide 36 System flowchart for the transaction-posting application Transaction journal Customer transactions Customer master file Post customer transactions (CM3000) Error listing Error transactions Murach’s OS/390 and z/OS JCL Transaction summary report Figure 4-18a Chapter 4, Slide 37 Data set requirements for the transaction-posting application ddname CUSTTRAN CUSTMAST ERRTRAN TRANJRNL TRANSUM ERRLIST Murach’s OS/390 and z/OS JCL Data set name MM01.CUSTOMER.TRANS MM01.CUSTOMER.MASTER MM01.CUSTOMER.TRANS.ERRS (SYSOUT data set) (SYSOUT data set) (SYSOUT data set) Figure 4-18b Chapter 4, Slide 38 The JCL for the transaction-posting application //MM01PT // //POST //CUSTTRAN //CUSTMAST //ERRTRAN //TRANJRNL //TRANSUM //ERRLIST JOB 36512,'M MURACH',MSGCLASS=A,MSGLEVEL=(1,1), NOTIFY=MM02 EXEC PGM=CM3000 DD DSNAME=MM01.CUSTOMER.TRANS,DISP=SHR DD DSNAME=MM01.CUSTOMER.MASTER,DISP=SHR DD DSNAME=MM01.CUSTOMER.TRANS.ERRS,DISP=SHR DD SYSOUT=* DD SYSOUT=* DD SYSOUT=* Murach’s OS/390 and z/OS JCL Figure 4-18c Chapter 4, Slide 39 The job control requirements for a report-preparation application AR master file Customer master file Dunning file Sorted dunning file Sort by invoice within customer (SORT) Extract dunning data (AR7100) Prepare ATB and overdue invoice report (AR7200) Sort by invoice, customer, state (SORT) Sorted AR master file Murach’s OS/390 and z/OS JCL Aged trial balance report Overdue invoiced report Figure 4-19a Prepare XREF report and statements (AR7300) Statements Cross reference report Chapter 4, Slide 40 Data set requirements for the programs invoked by the report-preparation application Step name Program ddname Data set name SORT1 SORT SYSOUT (SYSOUT data set) SORTIN MM01.ACCOUNT.MASTER SORTOUT MM01.ACCOUNT.MASTER.SORT SORTWK01 (temporary work file) AR7100 AR7100 SYSIN (instream data set) ARSORT MM01.ACCOUNT.MASTER.SORT CUSTMAST MM01.CUSTOMER.MASTER AR7200 AR7200 Murach’s OS/390 and z/OS JCL DUNNING MM01.DUNNING.FILE DUNNING MM01.DUNNING.FILE ATB (SYSOUT data set) OVERDUE (SYSOUT data set) Figure 4-19b Chapter 4, Slide 41 Data set requirements for the programs invoked by the report-preparation application (continued) Step name Program ddname Data set name SORT2 SORT SYSOUT (SYSOUT data set) SORTIN MM01.DUNNING.FILE SORTOUT MM01.DUNNING.FILE.SORT SORTWK01 (temporary work file) AR7300 AR7300 Murach’s OS/390 and z/OS JCL SYSIN (instream data set) DUNSORT MM01.DUNNING.FILE.SORT XREF (SYSOUT data set) STMTS (SYSOUT data set) Figure 4-19c Chapter 4, Slide 42 The JCL for the report-preparation application 1 2 3 4 5 6 7 8 9 10 11 //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) Murach’s OS/390 and z/OS JCL Figure 4-20a Chapter 4, Slide 43 The report-preparation application (continued) 12 13 14 //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=* Murach’s OS/390 and z/OS JCL Figure 4-20b Chapter 4, Slide 44