2

我遇到了下面的场景,我对 cond 参数如何在前面的步骤中工作感到有些困惑。

例如......

//STep 1 EXEC
//Step 2 EXEC cond=(0,ne,step1)
//step 3 EXEC cond=(0,ne,step2)

在上述情况下,对于一个输入文件 step1 RC 为 4,因此 Step2 被清除,但 step 3 已执行。
这是我感到困惑的地方,jcl 是否会将已刷新的步骤 rc 视为 0 或者即使未执行 step2 也会导致 step3 执行的原因。

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

4

1 回答 1

7

文档...

使用 COND 参数测试来自先前作业步骤的返回代码,并确定是否绕过此作业步骤。您可以对 COND 参数指定一个或多个测试,并且可以测试来自特定作业步骤或已完成处理的每个作业步骤的返回代码。如果满足任何测试条件,则系统将 COND 参数评估为真并绕过作业步骤。如果 COND 参数上指定的测试条件均不满足,则系统将 COND 参数评估为假并执行作业步骤。

系统针对当前作业执行的返回代码执行 COND 参数测试。如果测试返回先前绕过的步骤,则系统将该测试评估为假。

请注意我用斜体表示的文本。因为“系统将测试评估为假”,所以执行作业步骤。换句话说,EXEC 语句的 COND 参数按文档说明工作。至于为什么这个参数被设计成这样工作,恐怕我在 40 多年前发明它时并没有在这个领域工作,因此无法说出原始开发人员的推理。

您可能需要查看IF 语句,它提供了测试给定步骤是否已运行以及测试其返回码的能力。

//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
于 2012-03-24T03:39:38.877 回答