在jcl中刷新了步骤返回码

时间:2012-03-23 14:12:24

标签: jcl return-code

我遇到了下面的情节,我对cond参数如何适用于前一步骤而感到困惑。

例如......

// STep 1 EXEC
//步骤2 EXEC cond =(0,ne,step1)
//步骤3 EXEC cond =(0,ne,step2)

在上述情况下,一个输入文件step1 RC为4,因此Step2被刷新,但步骤3已执行。
这是我很困惑的地方,即使step2没有被执行,jcl看到刷新的步骤rc为0或是什么导致step3执行。

对此的任何解释都表示赞赏并感谢提前。

1 个答案:

答案 0 :(得分:6)

来自documentation ...

  

使用COND参数测试先前作业步骤的返回代码   并确定是否绕过此作业步骤。您可以指定一个或   更多关于COND参数的测试,您可以测试返回代码   特定的工作步骤或已完成的每个工作步骤   处理。如果满足任何测试条件,则为系统   将COND参数计算为true并绕过作业步骤。如果   没有在COND参数上指定的测试条件   满意后,系统将COND参数评估为false和   执行工作步骤。

     

系统对来自的返回码执行COND参数测试   当前执行的工作。 如果测试返回先前的   绕过步骤,系统将测试评估为假。

请注意我用斜体字的文字。因为“系统将测试评估为错误”,所以执行作业步骤。换句话说,EXEC语句的COND参数正如记录的那样工作。至于为什么这个参数是按照这种方式设计的,我恐怕在大约40多年前发明它时,我不是在这个领域工作,因此不能说原文的推理开发人员。

您可能希望查看IF statement,除了测试其返回代码之外,它还提供了测试给定步骤是否已运行的功能。

//STEP01 EXEC 
//CK01   IF STEP1.RC EQ 0 THEN
//STEP02 EXEC
//CK01E  ENDIF
//CK02   IF STEP2.RUN & STEP2.RC EQ 0
//STEP03 EXEC
//CK02E  ENDIF

或者,您可以编码...

//STEP01 EXEC 
//CK01   IF STEP1.RC EQ 0 THEN
//STEP02 EXEC
//CK02   IF STEP2.RC EQ 0
//STEP03 EXEC
//CK02E  ENDIF
//CK01E  ENDIF