我正在IBM publib.boulder网站上编写一个基本的JCL脚本。下面是JCL,它只是按升序对字符列表进行排序。作业执行得很好,但SYSIN的内容没有打印到作业状态,如publib演示中所示
这是我的代码:
//SORT JOB OTIMPF01,CLASS=A,MSGCLASS=H
/*
//STEP1 EXEC PGM=SORT
//SYSIN DD * SORT FIELDS=(1,75,CH,A)
/*
//SYSOUT DD SYSOUT=*
//SYSIN DD *
NEPTUNE
PLUTO
EARTH
VENUS
MERCURY
MARS
URANUS
SATURN
JUPITER
/*
//SORTOUT DD SYSOUT=*
/*
我知道这与MSGCLASS=语句有关。publib中的示例代码使用MSGCLASS=H,我被告知这是不同的,这取决于谁在大型机上设置了选项。我的问题是,我如何在不询问任何人的情况下弄清楚我的大型机的MSGCLASS设置为什么?同样,我只想在作业状态中显示按升序排序的字符的结果。
它应该是这样的。。。
ICE134I 0 NUMBER OF BYTES SORTED: 720
ICE180I 0 HIPERSPACE STORAGE USED = 0K BYTES
ICE188I 0 DATA SPACE STORAGE USED = 0K BYTES
ICE052I 0 END OF DFSORT
EARTH
JUPITER
MARS
MERCURY
NEPTUNE
PLUTO
SATURN
URANUS
VENUS
只有我的工作状态读数不会在工作状态的输出中显示字符地球到金星。
我的工作状态是这样的。。。
IEF373I STEP/STEP1 /START 2014002.1033
IEF374I STEP/STEP1 /STOP 2014002.1033 CPU 0MIN 00.00SEC SRB 0MIN 00.00SEC VIRT 212K SYS 248K EXT 8K SYS 11592K
IEF375I JOB/SORT /START 2014002.1033
IEF376I JOB/SORT /STOP 2014002.1033 CPU 0MIN 00.00SEC SRB 0MIN 00.00SEC
ICE000I 1 - CONTROL STATEMENTS FOR 5694-A01, Z/OS DFSORT V1R5 - 10:33 ON THU JAN 02, 2014 -
ICE010A 0 NO SORT OR MERGE CONTROL STATEMENT
ICE751I 0 C5-K05352 C6-Q95214 E7-K90000
ICE052I 3 END OF DFSORT
我想这与正确设置MSGCLASS有关。我试过在谷歌上搜索z/OS MSGCLASS,但毫不奇怪,它的搜索结果很少。
关键问题是ICE010A 0 NO SORT OR MERGE CONTROL STATEMENT
。假设你在这里正确地转录了你的JCL,你输入了:
//SYSIN DD * SORT FIELDS=(1,75,CH,A)
/*
在这种情况下,您向SORT
提供了一个空的输入流,因为SORT FIELDS=(1,75,CH,A)
被视为对DD
语句的注释。
你应该输入:
//SYSIN DD *
SORT FIELDS=(1,75,CH,A)
/*
在SDSF中尝试ST jobname,它将显示所有输出。ST是作业的状态,显示系统上已提交或已完成的所有作业的所有输出。
此外,如果您正在查看保留队列H jobname,则查看它显示的作业的输出类,并尝试将msgclass更改为保留队列上显示的类之一。例如,在我的系统上,我可以在保留队列上看到类X和H,但当我使用ST命令时,只能看到类A
事实上,您在链接到的手册页面中发现了一个文档错误。然而,您也引入了自己的错误。
对于您的大型机安装的SORT软件包(可能是IBM的DFSORT或竞争对手SyncSort,也可能是进一步的竞争对手CA-SORT):
//SYSIN DD whatever
就是你放控制卡的地方。
在上文中,可以是*、DATA或实际数据集的参数。
输入到您使用的SORT程序的DDNAME是SORTIN:
//SORTIN DD whatever (same as above)
您也意外地创建了SYSIN。应该是:
//SYSIN DD *
NEPTUNE
PLUTO
EARTH
VENUS
MERCURY
MARS
URANUS
SATURN
JUPITER
然后,您应该在SORTOUT假脱机文件中看到示例的输出。
当你用SORT做其他事情时,还有其他DD(如MERGE、JOINKEYS、OUTFIL),它们可以或确实使用不同名称的DD。也可以覆盖标准名称,但不能将它们覆盖到SYSIN。
//SYSINDD*有点像STDIN,但不要被这种比较冲昏头脑。按照惯例,许多大型机实用程序使用SYSIN进行输入。如果JCL流包含前面没有DDName的"卡",则会自动生成SYSIN的DDName。COBOL对于一种类型的输入有一个ACCEPT谓词,其默认DD是SYSIN。然而,仅仅在JCL中为一个步骤包含一个SYSIN并不能保证它会被使用。如果EXEC上的程序不使用SYSIN,那么简单地包括SYSIN不会导致从那里读取数据。