Job Control Language (JCL) is a scripting language used on a mainframe to instruct the system on how to run a batch job. In AWS Blu Insights, it is handled in the mainframe group following the statements listed below.
The call on DD +DSN
can implies dependencies on “DATASET” object, “FILE_DEFINITION” object and a control card (.CTL).
//file-defintion-name DD (DISP=SHR,)? DSN(AME)?=dataset-name(controlcard-file)
Where file-defintion-name
, dataset-name
and controlcard-file
are respectively a “FILE_DEFINITION” object, a “DATASET” object and the name of a control card in the project. controlcard-file
and file-defintion-name
are optional. Dynamic dataset-name
, i.e with a name containing “%%” or “&”, are not handled yet.
The call to DLBL
implies a dependency on a Mainframe file.
DLBL file_def 'mainframe_file'
Where file_def
is the name of the file definition and mainframe_file
the name of a mainframe file in the project.
EXEC statements like NAME1.NAME2.EXEC
implies a dependency on a JCL, PROC, COB, EZT, REXX, PL1, CLIST or RPG file.
NAME1.NAME2.EXEC(MY_PROG)
implies a dependency on the program MY_PROG
where NAME1
and NAME2
can be any valid names
NAME1.EXEC(MY_PROG)
implies a dependency on the program MY_PROG
where NAME1
can be any valid names
The call to EXEC PGM
implies a dependency on a COB, EZT, REXX, PL1 or RPG file.
EXEC PGM=program_file ... PROGRAM=program
EXEC PGM=program_file ... PROG=program
EXEC PGM=program_file ... PGMNAME=program
EXEC PGM=program_file ... PGMNAME='program'
EXEC PGM=system_utility PARM=(program_type,program_name,psb_name, ...) ... PROGRAM=program
EXEC PGM=system_utility PARM=('program_type',program_name,psb_name, ...) ... PROGRAM=program
EXEC PGM=system_utility PARM='program_type,program_name,psb_name, ...' ... PROGRAM=program
Where program_file
can be the raw name of a file or a variable (&program_file
) containing a filename. PROGRAM, PROG and PGNAME
are parameters pass to program_file
and program
(JCL, PROC, COB, EZT, REXX, PL1, RPG or CCDEF) the name of the program to be executed. PARM=( ... )
or PARM=' ... '
is optional parameter.
When system_utility
is configured with some system utility program (DFSRRC00, DLIBATCH, DBBBATCH, IMSBATCH, IMSFP and DLIBMP) and the program_type
as DLI, BMP, DBB, IFP. The system utility program uses PARM
parameter to execute a program (COBOL, JCL, PROC, REXX, PL1, RPG, ASM, LNK, EZT, CTL or CCDEF) mentioned in program_name
and PSB file mentioned in psb_name
.
We can also call an in-stream procedure thanks to the EXEC PGM
statement. In that case, it will create no dependency.
The call to EXEC PROC
implies a dependency on a JCL, PROC, COB, EZT, REXX, PL1, CLIST, RPG or CCDEF file.
EXEC PROC=procedure_file ... PROGRAM=program
EXEC PROC=procedure_file ... PROG=program
EXEC PROC=procedure_file ... PGMNAME=program
EXEC proc=procedure_file ... PGMNAME='program'
EXEC procedure_file ... PROGRAM=program
EXEC procedure_file ... PROG=program
EXEC procedure_file ... PGMNAME=program
EXEC procedure_file ... PGMNAME='program'
EXEC PROC=system_utility ... NAME=program,PSB=psb_name
EXEC system_utility ... NAME=program,PSB=psb_name
Where procedure_file
can be the raw name of a file or a variable (&procedure_file
) containing a filename. PROGRAM, PROG and PGNAME
are parameters pass to procedure_file
and program
the name of the program to be executed.
When system_utility
is configured with some system utility program (DFSRRC00, DLIBATCH, DBBBATCH, IMSBATCH, IMSFP and DLIBMP) then it executes a program (COBOL, JCL, PROC, REXX, PL1, RPG, ASM, LNK, EZT, CLIST, CTL or CCDEF) mentioned in program_name
and PSB file mentioned in psb_name
.
We can also call an in-stream procedure thanks to the EXEC PROC
statement. In that case, it will create no dependency.
The call to ISPSTART CMD
can be used to reference a program (COBOL, JCL, PROC, REXX, PL1, RPG, ASM, LNK, EZT, CLIST or CTL)
ISPSTART CMD(MY_PROG)
implies a dependency on a program called MY_PROG
The call to RUN PROG
implies a dependency on a JCL, PROC, COB, EZT, REXX, PL1 or RPG file.
RUN PROG(program_file)
Where program_file
can be the raw name of a file or a variable (&program_file
) containing this name.
The call to RUN PROGRAM
implies a dependency on a JCL, PROC, COB, EZT, REXX, PL1 or RPG file.
RUN PROGRAM(program_file)
Where program_file
can be the raw name of a file or a variable (&program_file
) containing this name.
In JCL program, SQL statements are getting executed in the in-stream data section. In-stream data will never begin with //
. End of the in-stream can be identified by line begins with // or /* or //*
and sometimes end of the file.
//SYSIN DD *
SELECT * FROM TABLE_NAME;
//SYSIN DD DATA
UPDATE TABLE_NAME SET COLUMN1 = VALUE1 WHERE ...;
Note: All in-stream data are not SQL commands. It may be RUN PROGRAM
statement or others.
The INCLUDE MEMBER
statement implies a dependency on a Mainframe file. Dependencies with variables (starting with “$” or having an “&” in their names) are ignored.
INCLUDE MEMBER=mainframe_file
Where mainframe_file
is the name of a Mainframe file in the project.
The call to ADDRQ
statement implies a dependency on a JCL file, like the following example:
ADDRQ,JOB=file_name_1,DEPJOB= file_name_2
Where file_name_1
and file_name_2
can be the names of a JCL files.
The call to DEMAND
statement implies a dependency on a JCL file, like the following example:
DEMAND,JOB=file_name_1,DEPJOB= file_name_2
Where file_name_1
and file_name_2
can be the names of a JCL files.
The call to DEMANDH
statement implies a dependency on a JCL file, like the following example:
DEMANDH,JOB=file_name_1,DEPJOB= file_name_2
Where file_name_1
and file_name_2
can be the names of a JCL files.
VAR=Test
This statement assignes the value Test
to the variable VAR
PROG=MY.PROG.OF.&VAR
This statement uses the variable VAR
, it is equivalent to do PROG=MY.PROG.OF.Test
.
When possible, the dependency analysis will replace the usage of a variable by its value.