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"是记录 1,"CUST2 1001"是记录 2。 当读取数据时遇到符号 /* 时,即满足数据结束条件。
在示例 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 创建的数据集将作业日志保存到数据集中。 但无法像 JMR 或 XDC 中那样通过这种方式捕获整个作业日志(即,JESMSG 将不会被编目)。
//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 中。