Jcl 简明教程

Running COBOL Programs using JCL

Compiling COBOL Programs

要在批处理模式下使用 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 指示编译器在程序中使用相对寻址模式。使用 SYSIN 参数传递 COBOL 程序,并且复用库是由 SYSLIB 中的程序使用的库。

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

Running COBOL Programs

以下是一个 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 模块。

Passing Data to COBOL Programs

数据输入 COBOL 批处理程序可以通过文件、PARAM 参数和 SYSIN DD 语句进行。在上文示例中:

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

  2. 链接段将 PARM 参数数据 ACCT5000 接收在程序 MYPROG 的 LINKAGE 段中,其中定义了一个变量。

  3. 程序过程分段中的 ACCEPT 语句会接收 SYSIN 语句中的数据。每个 ACCEPT 语句都会将一个完整记录(即 CUST1 1000)读入到程序中定义的某个工作存储变量中。

Running a COBOL-DB2 program

要运行 COBOL DB2 程序,JCL 和程序中会使用专门的 IBM 实用工具;DB2 区域和必需的参数会被传递为该实用工具的输入。

在运行 COBOL-DB2 程序的过程中会跟随如下步骤:

  1. 当一个 COBOL-DB2 程序被编译时,将同时创建一个 DBRM(数据库请求模块)和加载模块。DBRM 包含 COBOL 程序的 SQL 语句,并且已检查其语法是否正确。

  2. DBRM 被绑定到 COBOL 将在其中运行的 DB2 区域(环境)。这可以使用 JCL 中的 IKJEFT01 实用工具来完成。

  3. 在绑定步骤之后,使用 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 子系统 ID (SSID) 以及 DB2 计划名称会通过 SYSTSIN DD 语句传递。DBRM 库在 STEPLIB 中有所具体说明。