我对如何处理proc的rc有疑问。假设
//STEP1 EXEC PROC=BANKEMP如何使用“如果其他.pls提供语法”处理此步骤返回的代码。
发布于 2022-12-03 13:34:50
z/OS MVS JCL
IF /IF/ The / ENDIF语句
在"z/OS引用“(第IF/IF/ELSE/ENDIF语句构造章)中描述了z/OS / are /OS语句。这些语句可用于测试先前执行的步骤的终止结果。
从z/OS的角度来看,如果以下情况下,已成功完成:
如果存在由系统强制执行的ABEND,即完成代码为"Shhh“形式( hhh为三个十六进制数字),或由程序发出,即完成代码为”dddd“(dddd为四位小数位),则该步骤被视为已结束unsuccessfully.。
测试成功的步骤执行的结果
基本上,您可以针对之前所有步骤的最高返回代码(实际上已经运行了)进行测试,也可以针对实际执行了的单个步骤的特定返回代码进行测试。针对由于IF语句而未运行的步骤进行测试,始终返回FALSE (该步骤在作业日志中标记为“刷新”)。
如果在编写IF语句时不引用步骤或过程步骤,则可以根据迄今为止最高的返回代码进行测试:
//IF01 IF RC EQ 5 THEN如果要测试特定步骤的返回代码,则需要对步骤名或过程步骤名和步骤名进行编码。
//IF01 IF STEP01.RC EQ 5 THEN或
//IF01 IF STEP01.PROCST02.RC EQ 5 THEN注意:您不能引用EXEC PROC=语句,因为该语句不会执行程序,而只是将JCL语句从过程复制到当前作业中。只有EXEC PGM=语句执行程序,只有程序设置返回代码。
针对ABENDs进行测试,或步骤是否已运行或未运行
因此,您可以使用关键字ABEND、¬ABEND、ABENDCC、RUN或¬RUN来测试这些步骤结束状态。有关更多细节,请参见上面的手册。
使用返回码的示例演示
这里是一个示例JCL过程,您可以使用它来处理返回代码。请注意,第一步创建了一个小的REXX过程,该过程将由以下步骤调用,以设置特定的返回代码。将此过程复制到JCL库中的一个成员,并将其命名为RCTEST。
//RCTEST PROC PROCRC01='0004',PROCRC02='0008'
//*
//*---------------------------------------------------------
//*
//PROCST00 EXEC PGM=IEBGENER
//SYSPRINT DD DUMMY
//SYSIN DD DUMMY
//SYSUT1 DD *,DLM=##
/* REXX */
/* Test if PARM is a whole number between 0 and 4095 */
/* If true, set RC to that value, else set RC=12 */
if datatype( arg(1), "W" )
then do
if arg(1) >= 0 & arg(1) < 4096
then RC = arg(1)
else RC = 12
end
else RC = 12
exit RC
##
//SYSUT2 DD DISP=(NEW,PASS),DSN=&&REXX(SETCODE),
// RECFM=FB,LRECL=80,SPACE=(1,(1,,1)),AVGREC=K
//*
//*---------------------------------------------------------
//*
//PROCST01 EXEC PGM=IKJEFT1A,PARM='%SETCODE &PROCRC01'
//SYSTSPRT DD DUMMY
//SYSTSIN DD DUMMY
//SYSEXEC DD DISP=(OLD,PASS),DSN=&&REXX
//*
//*---------------------------------------------------------
//*
//PRIF01 IF PROCST01.RC GT 0 THEN
//*
//PROCST02 EXEC PGM=IKJEFT1A,PARM='%SETCODE &PROCRC02'
//SYSTSPRT DD DUMMY
//SYSTSIN DD DUMMY
//SYSEXEC DD DISP=(OLD,PASS),DSN=&&REXX
//*
//PRIF01E ENDIF 编写这样的作业以调用过程,并通过PROCRC01=和PROCRC02=在EXEC语句上指定所需的返回代码。请注意,您需要使用JCL库的名称来调整JCLLIB (您将过程复制到的库中)。
//jobname JOB ....
//***************************************************/
//*
// JCLLIB ORDER=your.jcl.library
//*
//***************************************************/
//*
//STEP00 EXEC RCTEST,PROCRC01='0004',PROCRC02='0006'
//*
//IF01 IF STEP00.PROCST01.RC EQ 4 THEN
//STEP01 EXEC PGM=IEFBR14
//IF01 ENDIF
//*
//IF02 IF RC EQ 4 THEN
//STEP02 EXEC PGM=IEFBR14
//IF02 ENDIF
//*
//IF03 IF RC NE 0 THEN
//STEP03 EXEC PGM=IEFBR14
//IF03 ENDIF
//*
//*
//IF04 IF RC EQ 0 THEN
//STEP04 EXEC PGM=IEFBR14
//IF04 ENDIF
//* 如果要在过程之外处理返回代码,可以简单地将第一步从过程(PROCST01)复制到工作中。
https://stackoverflow.com/questions/74660904
复制相似问题