JCL – Job Control Language.
Job Control Language (JCL) is a scripting language used on IBM mainframe operating systems. JCL is a set of statements that you code to tell the z/OS operating system about the work you want it to perform. It instructs the system on how to run a batch job or start a subsystem. Although the instruction set of statements is quite large, however, most jobs can be run using a very small subset.
There are actually two IBM JCLs: one for the operating system lineage that begins with DOS/360 and whose latest member is z/VSE; and the other for the lineage from OS/360 to z/OS. They share some basic syntax rules and a few basic concepts, but are otherwise very different. But at the bottom line of it – JCL statements tell z/OS where to find the appropriate input, how to process that input (that is, what program or programs to run), and what to do with the resulting output.
One has to remember that JCL does end with the word “Language” but it’s not a programming language and as such does nothing apart from just instructing the system on how to run a batch job or start a subsystem, as said earlier.
JCL identifies a unit of work and tells the systems “what” to run, not “how” to run it. It is a basic language that allows work to run without requiring real-time intervention.
The same thing is done on every system. If you wanted to edit a WORD document, you would have to click on the WORD icon to start the program [the equivalent of the JCL EXEC statement]. Then you would have to use the FILE drop-down to create a new file, or open an existing one. If the file exists you must identify the directory or path, as well as the name you intend to edit. All this occurs every time you process a file.
Now if we wanted someone else to edit that file, we would have to provide them the information about what program to use and the directory and file that was going to be changed. This is what JCL does. It provides that information for work, so that it can run “unattended”. The instructions for the program, the input, and the output are described by the JCL statements.
In addition, JCL can have multiple steps joined together into a single job.
In some JCL job streams there could be dozens of data sets [input and output] involved, so the ability to code these using this language ensures reliability and reduces the amount of work that is involved in running/managing large numbers of processes.