运行COBOL程序( Run COBOL Programs)

优质
小牛编辑
148浏览
2023-12-01

编译COBOL程序

为了使用JCL以批处理模式执行COBOL程序,需要编译程序并使用所有子程序创建加载模块。 JCL在执行时使用加载模块而不是实际程序。 在使用JCLLIBSTEPLIB执行时,将加载库连接并提供给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指示编译器在程序中使用相对寻址模式。 COBOL程序使用SYSIN参数传递,副本是SYSLIB中程序使用的库。

该JCL生成程序的加载模块作为输出,用作执行JCL的输入。

运行COBOL程序

在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模块。

将数据传递给COBOL程序

输入到COBOL批处理程序的数据可以是通过文件,PARAM参数和SYSIN DD语句。 在上面的例子中:

  • 数据记录通过文件MYDATA.URMI.INPUT传递给MYPROG。 该文件将使用DD名称INPUT1在程序中引用。 该文件可以在程序中打开,读取和关闭。

  • PARM参数数据ACCT5000在程序MYPROG的LINKAGE部分中以该部分中定义的变量接收。

  • SYSIN语句中的数据是通过程序的PROCEDURE分区中的ACCEPT语句接收的。 每个ACCEPT语句将一整条记录(即CUST1 1000)读入程序中定义的工作存储变量。

运行COBOL-DB2程序

对于运行COBOL DB2程序,在JCL和程序中使用专用的IBM实用程序; DB2区域和必需参数作为输入传递给实用程序。

在运行COBOL-DB2程序时遵循以下步骤:

  • 编译COBOL-DB2程序时,将与加载模块一起创建DBRM(数据库请求模块)。 DBRM包含COBOL程序的SQL语句,其语法已检查正确。

  • DBRM绑定到将运行COBOL的DB2区域(环境)。 这可以使用JCL中的IKJEFT01实用程序来完成。

  • 在绑定步骤之后,使用IKJEFT01(再次)运行COBOL-DB2程序,其中加载库和DBRM库作为JCL的输入。

//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子系统标识(SSID),DB2计划名称在SYSTSIN DD语句中传递。 DBRM库在STEPLIB中指定。