- 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 执行的批处理程序都需要数据输入,这些数据会被处理并创建输出。有多种方法可以将输入提供给程序并写入从 JCL 收到的输出。在批处理模式下,不需要用户交互,但输入和输出设备以及所需的组织都定义在 JCL 中并提交。
JCL 中的数据输入
有多种方法可以使用 JCL 将数据提供给程序,这些方法已在下面解释
内嵌数据
可以使用 SYSIN DD 语句为程序指定内嵌数据。
//CONCATEX JOB CLASS=6,NOTIFY=&SYSUID //* Example 1: //STEP10 EXEC PGM=MYPROG //IN1 DD DSN=SAMPLE.INPUT1,DISP=SHR //OUT1 DD DSN=SAMPLE.OUTPUT1,DISP=(,CATLG,DELETE), // LRECL=50,RECFM=FB //SYSIN DD * //CUST1 1000 //CUST2 1001 /* //* //* Example 2: //STEP20 EXEC PGM=MYPROG //OUT1 DD DSN=SAMPLE.OUTPUT2,DISP=(,CATLG,DELETE), // LRECL=50,RECFM=FB //SYSIN DD DSN=SAMPLE.SYSIN.DATA,DISP=SHR //*
在示例 1 中,输入 MYPROG 通过 SYSIN 传递。数据在 JCL 中提供。两条数据记录被传递到程序。请注意,/* 标记内嵌 SYSIN 数据的结尾。
"CUST1 1000" 是 record1,“CUST2 1001” 是 record2。当读取数据时遇到符号 /* 时,就会满足数据结束条件。
在示例 2 中,SYSIN 数据保存在一个数据集中,其中 SAMPLE.SYSIN.DATA 是一个 PS 文件,可以保存一条或多条数据记录。
通过文件进行数据输入
如前几章中的大多数示例中所述,程序的数据输入可以通过 PS、VSAM 或 GDG 文件提供,并附带相关的 DSN 名称和 DISP 参数以及 DD 语句。
在示例 1 中,SAMPLE.INPUT1 是通过其将数据传递到 MYPROG 的输入文件。在程序中将其称为 IN1。
JCL 中的数据输出
JCL 中的输出可以编入数据集目录或传递到 SYSOUT。如 DD 语句章节中所述,**SYSOUT=*** 将输出重定向到 JOB 语句的 MSGCLASS 参数中提到的相同类别。
保存作业日志
指定 **MSGCLASS=Y** 将作业日志保存在 JMR(作业日志管理和检索)中。整个作业日志可以重定向到 SPOOL,并可以通过在 SPOOL 中针对作业名称发出 XDC 命令将其保存到数据集。当在 SPOOL 中发出 XDC 命令时,会打开一个数据集创建屏幕。然后可以通过提供适当的 PS 或 PDS 定义来保存作业日志。
还可以通过为 SYSOUT 和 SYSPRINT 指定已创建的数据集来将作业日志保存到数据集中。但是,无法通过这种方式捕获整个作业日志(即,JESMSG 不会像在 JMR 或 XDC 中那样编入目录)。
//SAMPINST JOB 1,CLASS=6,MSGCLASS=Y,NOTIFY=&SYSUID //* //STEP1 EXEC PGM=MYPROG //IN1 DD DSN=MYDATA.URMI.INPUT,DISP=SHR //OUT1 DD SYSOUT=* //SYSOUT DD DSN=MYDATA.URMI.SYSOUT,DISP=SHR //SYSPRINT DD DSN=MYDATA.URMI.SYSPRINT,DISP=SHR //SYSIN DD MYDATA.BASE.LIB1(DATA1),DISP=SHR //* //STEP2 EXEC PGM=SORT
在上面的示例中,SYSOUT 编入 MYDATA.URMI.SYSOUT 目录,SYSPRINT 编入 MYDATA.URMI.SYSPRINT 目录。