- JCL 教程
- JCL 首页
- JCL - 概述
- JCL - 环境
- JCL - JOB 语句
- JCL - EXEC 语句
- JCL - DD 语句
- JCL - 基本库
- JCL - 过程
- JCL - 条件处理
- JCL - 定义数据集
- JCL - 输入/输出方法
- JCL - 运行 COBOL 程序
- JCL - 实用程序
- JCL - 基本排序技巧
- JCL 有用资源
- JCL - 问题和解答
- JCL - 快速指南
- JCL - 有用资源
- JCL - 讨论
使用 JCL 运行 COBOL 程序
编译 COBOL 程序
为了使用 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 指示编译器在程序中使用相对寻址模式。COBOL 程序通过 SYSIN 参数传递,副本库是程序在 SYSLIB 中使用的库。
此 JCL 生成的程序加载模块作为输出,用作执行 JCL 的输入。
运行 COBOL 程序
下面是一个 JCL 示例,其中程序 MYPROG 使用输入文件 MYDATA.URMI.INPUT 执行,并生成两个写入卷轴的输出文件。
//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 子系统 ID(SSID)和 DB2 计划名称都通过 SYSTSIN DD 语句传递。DBRM 库在 STEPLIB 中指定。