通常情况下,当我查看JCL时,我会将JEM命令键入我的ISPF命令行,然后快速扫描并告诉我任何错误,例如未分配的文件。
唯一的问题是,当我们在JCL中有IF语句时,JEM将跳过这些部分。所以即使JCL JEM-ed干净,我仍然可能最终得到JCL错误。无论如何我可以验证JCL,除了实际检查每个文件是否已分配?
答案 0 :(得分:2)
在作业卡中使用In [14]: df.set_index("Team").notnull().groupby(level=0).mean()
Out[14]:
A C D
Team
one 0.666667 0.666667 0.0
three 0.500000 1.000000 0.5
two 0.666667 1.000000 1.0
并提交作业。这将进行语法检查,但不会运行您的作业。
请记住,它不会执行诸如“文件不存在”之类的检查。
答案 1 :(得分:2)
您可以做的是使用可以发出条件代码的程序来检查条件代码处理逻辑,以替换实际的程序。
对于发出Cond代码0的程序,只需使用调用 IEFBR14
程序的步骤替换步骤的jcl。
e.g。用
替换步骤//STEP010 EXEC PGM=IEFBR14
(包括从原始步骤检查的任何条件代码)
对于发布条件代码的程序(例如8),您可以使用带有IDCAMS
的 SET MAXCC=8
,例如
//STEP010 EXEC PGM=IDCAMS
//SYSIN DD *
MAXCC = 8
//SYSPRINT DD SYSOUT=*
你可以很容易地编写一个程序Rexx,Cobol PL1,可以将参数作为代码。
我个人有一个名为CCFIN的汇编程序(这也可以发布用户Abends),它是: -
TITLE 'ISSUE COND CODE OR ABEND' 00001000
PRINT NOGEN 00001100
INIT REGNUM=1 STANDARD INITIALISATION 00001200
*-------------------------------------------------------------------- 00001301
* GET PARAMETER INFORMATION 00001401
*-------------------------------------------------------------------- 00001501
L 2,0(1) AD OF PARAMETER 00001601
SR 3,3 00001701
LH 3,0(2) GET LENGTH OF PARAMETER 00001801
CH 3,=H'0' CHECK IF ANY PARAMETER 00001901
BH CCFIN001 OK SO FAR 00002001
TO_SHORT WTO 'CCFIN01 - NO PARAMETER GIVEN',ROUTCDE=(2),DESC=(1) 00002101
ERR_END L 13,4(13) 00002203
RETURN (14,12),RC=1 00002301
CCFIN001 CH 3,=H'6' MAX LENGTH OF 6 00002401
BH CCERET01 ERROR > 6 00002502
*-------------------------------------------------------------------- 00002601
* CHECK TO SEE IF USER ABEND IS REQUIRED (UA????) 00002701
*-------------------------------------------------------------------- 00002801
MVC UFLAG(1),=C'N' DEFAULT NO 00002901
CH 3,=H'3' IS PARAMETER < 3 00003001
BL CCFIN030 YES THEN CANT BE USER ABEND 00003101
CLC 2(2,2),=C'UA' CHECK FOR USER ABEND 00003201
BE CCFIN020 00003301
CH 3,=H'4' NOT USER ABEND SO MAX LEN IS 4 00003401
BH CCERET02 ERROR 00003502
B CCFIN030 NOT USER ABEND BUT LEN OK 00003601
CCFIN020 MVC UFLAG(1),=C'Y' SET USER ABEND REQUIRED 00003701
LA 5,1(0,0) 00003801
B CCFIN031 00003901
*-------------------------------------------------------------------- 00004001
* CONVERT PARAMETER TO COMPLETEION CODE 00004101
*-------------------------------------------------------------------- 00004201
CCFIN030 LA 5,1(0,0) 00004301
CCFIN031 LA 4,NSTR 00004401
LA 2,1(2) SKIP PARAMETER LENGTH 00004501
MVC 0(4,4),=C'0000' ENSURE LEFT PAD WITH 0 00004601
LA 4,3(4) END OF AREA 00004701
AR 2,3 END OF PARAMETER LIST 00004801
CLC UFLAG(1),=C'Y' USER ABEND 00004901
BNE CCFIN032 00005001
SR 3,5 00005101
SR 3,5 00005201
CCFIN032 MVC 0(1,4),0(2) 00005301
SR 2,5 00005401
SR 4,5 00005501
BCT 3,CCFIN032 00005601
*-------------------------------------------------------------------- 00005701
* NUMERICS ONLY 00005801
*-------------------------------------------------------------------- 00005901
LA 4,NSTR 00006001
LA 3,4 00006101
CCFIN040 CLC 0(1,4),=X'F0' 00006201
BL CCERET03 00006302
CLC 0(1,4),=X'F9' 00006401
BH CCERET03 00006502
LA 4,1(4) 00006601
BCT 3,CCFIN040 00006701
*-------------------------------------------------------------------- 00006801
* CONVERT NUMBER TO BINARY INTO R15 00006901
*-------------------------------------------------------------------- 00007001
PACK PSTR,NSTR(4) 00007101
CVB 15,PSTR 00007201
CLC UFLAG(1),=C'Y' 00007301
BE FINUA 00007401
FINCC L 13,4(13) 00007501
RETURN (14,12),RC=(15) 00007601
FINUA LR 2,15 00007701
CL 2,=F'4095' 00007801
BNH FU0001 00007901
WTO 'CCFIN02 - USER ABEND CODE GREATER THAN 4095', X00008001
ROUTCDE=(2),DESC=(1) 00008101
SR 2,2 00008201
FU0001 ABEND (2) 00008301
CCERET01 WTO 'CCFIN03 - PARAMETER GREATER THAN 6 CHARACTERS', X00008401
ROUTCDE=(2),DESC=(1) 00008501
B ERR_END 00008603
CCERET02 WTO 'CCFIN04 - PARAMETER GREATER THAN 4 CHARACTERS', X00008701
ROUTCDE=(2),DESC=(1) 00008801
B ERR_END 00008903
CCERET03 WTO 'CCFIN05 - NON NUMERICS CHARACTERS IN PARAMETER', X00009001
ROUTCDE=(2),DESC=(1) 00009101
B ERR_END 00009203
FINISH 00009300
UFLAG DS CL1 00010001
NSTR DS 1F 00020001
PSTR DS D'0' 00030001
END 00036900
上述JCL(发布条件代码为8)将是: -
//STEP010 EXEC PGM=CCFIN,PARM="8"
//STEPLIB DD DSN=MY.LOADLIB,DISP=SHR
假设要测试的生产(原文如此)JCL是: -
//CCOP010R JOB (@OPC,PROD,OPC),'MIKE TAYLOR',
// RESTART=STEP020,
// NOTIFY=CCOP010
//*--------------------------------------------------------------------
//STEP010 EXEC PGM=IKJEFT01,REGION=8M,TIME=10
//*
//* SELECT REQUIRED RECORDS FROM THE JOB/APPL XREF
//*
//SYSPROC DD DISP=SHR,DSN=ISPF.EI.XGROUP.CLIST
//SYSEXEC DD DISP=SHR,DSN=CCOP010.USER.EXEC
//SYSTPRT DD SYSOUT=*
//SYSTSPRT DD SYSOUT=*
//SYSTSIN DD *
OIR00001
//JXIN DD DISP=SHR,DSN=CCOP010.JX.LIST
//JXOUT DD DISP=SHR,DSN=CCOP010.JXMOD.LIST
//*--------------------------------------------------------------------
//STEP020 EXEC PGM=SORT,REGION=8M,COND=(0,NE)
//*
//* SORT BY APPLICATION OPNO AND JOBNAME REMOVING ANY DUPLICATES
//*
//SYSIN DD *
SORT FIELDS=(1,16,CH,A,19,3,CH,A,23,8,CH,A)
SUM FIELDS=NONE
//SORTIN DD DISP=SHR,DSN=CCOP010.JXMOD.LIST
//SORTOUT DD DISP=(,PASS),DSN=&&STEP020A,UNIT=SYSDA,SPACE=(CYL,(50,1))
//SYSOUT DD SYSOUT=*
//*--------------------------------------------------------------------
//STEP030 EXEC PGM=IKJEFT01,REGION=8M,TIME=30,COND=(0,NE)
//*
//* SELECT REQUIRED RECORDS FROM THE JOB/APPL XREF
//*
//SYSPROC DD DISP=SHR,DSN=ISPF.EI.XGROUP.CLIST
//SYSEXEC DD DISP=SHR,DSN=CCOP010.USER.EXEC
//SYSTPRT DD SYSOUT=*
//SYSTSPRT DD SYSOUT=*
//SYSTSIN DD *
OIR00002
//JXIN DD DISP=(SHR,DELETE),DSN=&&STEP020A
//OIIN DD DISP=SHR,DSN=CCOP010.OI.LIST
//IEBOUT DD DISP=SHR,DSN=CCOP010.OIPDS.DATA
//REPORT DD DISP=SHR,DSN=CCOP010.OIPDS.REPORT
//*--------------------------------------------------------------------
我们想测试是否正确处理了STEP010发布的8的条件代码: -
以上内容可以改为: -
//CCOP010R JOB (@OPC,PROD,OPC),'MIKE TAYLOR',
// RESTART=STEP020,
// NOTIFY=CCOP010
//*--------------------------------------------------------------------
//STEP010 EXEC PGM=IDCAMS
//*
//* SELECT REQUIRED RECORDS FROM THE JOB/APPL XREF
//*
//SYSIN DD *
MAXCC = 8
//SYSPRINT DD SYSOUT=*
//*--------------------------------------------------------------------
//STEP020 EXEC PGM=IEFBR14,COND=(0,NE)
//*
//* SORT BY APPLICATION OPNO AND JOBNAME REMOVING ANY DUPLICATES
//*
//*--------------------------------------------------------------------
//STEP030 EXEC PGM=IEFBR14,COND=(0,NE)
//*
//* SELECT REQUIRED RECORDS FROM THE JOB/APPL XREF
//*
//*--------------------------------------------------------------------
e.g。运行与通过调度程序运行和跟踪的作业同名的作业可能会影响生产计划。