Jcl 简明教程

Input-Output Methods

通过 JCL 执行的任何批处理程序都需要数据输入,该输入会被处理,并创建一个输出。有不同的方法可向程序提供输入,并编写从 JCL 收到的输出。在批处理模式中,不需要用户交互,但输入和输出设备以及必需的组织在 JCL 中被定义并提交。

Data Input in a JCL

有各种方法可以使用 JCL 向程序提供数据,这些方法在下文中已经进行了说明:

INSTREAM DATA

可以通过 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 中,通过 SYSIN 向 MYPROG 传递输入。数据在 JCL 内提供。两个数据记录传递至程序。请注意,/* 标记流 SYSIN 数据的结束。

“CUST1 1000”是记录 1,“CUST2 1001”是记录 2。在读取数据时遇到符号 /* 时满足数据结束条件。

在示例 2 中,SYSIN 数据保存在数据集内,其中 SAMPLE.SYSIN.DATA 是一个 PS 文件,它可以保存一个或多个数据记录。

Data Input through files

如前几章中的大多数示例所述,程序的数据输入可以通过 PS、VSAM 或 GDG 文件提供,并带有 DD 语句中相关 DSN 名称和 DISP 参数。

在示例 1 中,SAMPLE.INPUT1 是数据通过它传递给 MYPROG 的输入文件。它在程序内被称为 IN1。

Data Output in a JCL

JCL 中的输出可以编入数据集或传递到 SYSOUT。如 DD 语句章节中所述, SYSOUT= * 将输出重定向到与 JOB 语句的 MSGCLASS 中提到的类相同的类。

Saving Job Logs

指定 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。