JCL (Job control Language) is the controller language of Mainframe (Z/OS or MVS). It has control statements that are being used a specific job for the operating system. It is bridge between application program and operating system. In a simplest way, JCL is a scripting language in mainframe which is being used to submit batch jobs in mainframe. Any program written in COBOL or PL/I or REXX etc can be executed via JCL.
In MVS ZOS or OS/390, the part of the operating system that handles JCL is called the Job Entry Subsystem (JES). There are two versions of JES.
- JES3 (A later version with additional capabilities)
In JCL data set names, parameters and system output devices can be defined. Every unit of work is called a JOB. Inside a job there are several small steps each of which running a program. Every JCL should be start with a JOBCARD. Job card is responsible for controlling the execution of JCL like how the output will be or in notification to the user etc, we have described job card in later post.
In a JCL all lines (except for in-stream input) have to begin with a slash “/“, and if we start any line with two slashes “//” that means that line will be processed by operating system. And every line should be start from first column. Delimiter and comment statements are exceptions.
- If we are starting a statement with a slash and an asterisk (/*) that’s called a Delimiter statement.
- In case of comment statement, it will begin with double slashes and an asterisk (//*).
When a JCL statement become too lengthy and exceeds the limit (71 character), it can be extended on to an indefinite number of continuation cards.:
- A statement can be continued to as many cards as necessary by ending all the JCL cards , at last instance a comma(“,”) is used,
- By using (//) at the start of the continuation card in column one and using at least a one-space character.
An Example of simple JCL:
//JOBNAME JOB (SYSTEM SPECIFIC PARM),'COMMENT',CLASS=P,MSGCLASS=X ß Jobcard//STEP01 EXEC PGM=IEBGENER ßSTEP for program call //SYSPRINT DD SYSOUT=* //SYSUT1 DD DSN=INFILE,DISP=SHR ßInput File //SYSUT2 DD DSN=OUTFILE, ßOutput File // DISP=(,CATLG,DELETE), // SPACE=(TRCKS,(80,4),RLSE), // DCB=(LRECL=80,BLKSIZE=800) //SYSIN DD DUMMY ßSYSIN Parameter