📅  最后修改于: 2020-11-22 17:07:31             🧑  作者: Mango
为了使用JCL以批处理方式执行COBOL程序,需要编译该程序,并使用所有子程序创建一个装入模块。 JCL在执行时使用装入模块,而不使用实际程序。在执行时,使用JCLLIB或STEPLIB将负载库连接起来并提供给JCL。
有许多大型机编译器实用程序可用于编译COBOL程序。一些公司使用Endevor之类的变更管理工具来编译和存储该程序的每个版本。这对于跟踪对程序所做的更改很有用。
//COMPILE JOB ,CLASS=6,MSGCLASS=X,NOTIFY=&SYSUID
//*
//STEP1 EXEC IGYCRCTL,PARM=RMODE,DYNAM,SSRANGE
//SYSIN DD DSN=MYDATA.URMI.SOURCES(MYCOBB),DISP=SHR
//SYSLIB DD DSN=MYDATA.URMI.COPYBOOK(MYCOPY),DISP=SHR
//SYSLMOD DD DSN=MYDATA.URMI.LOAD(MYCOBB),DISP=SHR
//SYSPRINT DD SYSOUT=*
//*
IGYCRCTL是IBM COBOL编译器实用程序。使用PARM参数传递编译器选项。在上面的示例中,RMODE指示编译器在程序中使用相对寻址模式。使用SYSIN参数传递COBOL程序,而抄写本是SYSLIB中该程序使用的库。
该JCL产生程序的加载模块作为输出,用作执行JCL的输入。
在一个JCL示例下,使用输入文件MYDATA.URMI.INPUT执行程序MYPROG,并生成两个写入到后台处理程序的输出文件。
//COBBSTEP JOB CLASS=6,NOTIFY=&SYSUID
//
//STEP10 EXEC PGM=MYPROG,PARM=ACCT5000
//STEPLIB DD DSN=MYDATA.URMI.LOADLIB,DISP=SHR
//INPUT1 DD DSN=MYDATA.URMI.INPUT,DISP=SHR
//OUT1 DD SYSOUT=*
//OUT2 DD SYSOUT=*
//SYSIN DD *
//CUST1 1000
//CUST2 1001
/*
MYPROG的加载模块位于MYDATA.URMI.LOADLIB中。请务必注意,上述JCL只能用于非DB2 COBOL模块。
可以通过文件,PARAM参数和SYSIN DD语句将数据输入到COBOL批处理程序。在上面的示例中:
数据记录通过文件MYDATA.URMI.INPUT传递到MYPROG。该文件将在程序中使用DD名称INPUT1进行引用。可以在程序中打开,读取和关闭文件。
在程序MYPROG的LINKAGE部分的该部分中定义的变量中接收PARM参数数据ACCT5000。
SYSIN语句中的数据通过程序PROCEDURE部门中的ACCEPT语句接收。每个ACCEPT语句都将一条完整记录(即CUST1 1000)读入程序中定义的有效存储变量中。
为了运行COBOL DB2程序,在JCL和程序中使用了专用的IBM实用程序。 DB2区域和必需的参数作为输入传递到实用程序。
在运行COBOL-DB2程序时,遵循以下步骤:
编译COBOL-DB2程序时,将与装入模块一起创建DBRM(数据库请求模块)。 DBRM包含COBOL程序的SQL语句,并检查其语法是否正确。
DBRM绑定到将在其中运行COBOL的DB2区域(环境)。可以使用JCL中的IKJEFT01实用程序来完成。
绑定步骤之后,使用IKJEFT01(再次)以加载库和DBRM库作为JCL的输入来运行COBOL-DB2程序。
//STEP001 EXEC PGM=IKJEFT01
//*
//STEPLIB DD DSN=MYDATA.URMI.DBRMLIB,DISP=SHR
//*
//input files
//output files
//SYSPRINT DD SYSOUT=*
//SYSABOUT DD SYSOUT=*
//SYSDBOUT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//DISPLAY DD SYSOUT=*
//SYSOUT DD SYSOUT=*
//SYSTSPRT DD SYSOUT=*
//SYSTSIN DD *
DSN SYSTEM(SSID)
RUN PROGRAM(MYCOBB) PLAN(PLANNAME) PARM(parameters to cobol program) -
LIB('MYDATA.URMI.LOADLIB')
END
/*
在上面的示例中,MYCOBB是使用IKJEFT01运行的COBOL-DB2程序。请注意,程序名称,DB2子系统ID(SSID),DB2计划名称在SYSTSIN DD语句中传递。 DBRM库在STEPLIB中指定。