📅  最后修改于: 2020-11-22 17:06:55             🧑  作者: Mango
通过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中的输出分类到数据集中或传递到SYSOUT。如DD语句一章所述, SYSOUT = *将输出重定向到与JOB语句的MSGCLASS参数中提到的类相同的类。
指定MSGCLASS = Y将作业日志保存在JMR(作业日志管理和检索)中。可以通过针对SPOOL中的作业名称提供XDC命令,将整个JOB日志重定向到SPOOL,并可以保存到数据集。在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中分类。