我遇到了下面的情节,我对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执行。
对此的任何解释都表示赞赏并感谢提前。
答案 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