无论上一步的RC是什么,我都想执行一个JCL步骤?
有我JCL 3个步骤:无论上一步的RC是什么,我都想执行一个JCL步骤?
步骤1:过程 第2步:NDM STEP 3:删除输出NDM
后,我要实现什么目标? 无论第2步的返回码是什么,我都想执行STEP 3。
我试过这个: COND =(16,GT)和COND =(16,ST,STEP 2)但它没有做我想做的事。
在您最后一步的EXEC声明中尝试COND = EVEN。
从documetnation:
COND = EVEN告诉MVS执行该作业步骤即使 先前步骤同样的工作异常终止,除非作业由MVS 操作员取消。
还有一个COND = ONLY:
COND = ONLY告诉MVS执行该作业步骤只有在 一前一工序同样的工作异常终止。
说明COND的:
COND是相当反直觉的。描述如下:
如果这些测试都不满足,系统将执行作业步骤; 如果满足任何测试,系统将跳过编码COND =参数的作业步骤。
所以你的COND =(16,GT)的意思是“如果16比任何前面的步骤的返回码大,不要执行这一步”。因此,只有在所有先前的步骤以RC> 16结束时才执行此步骤。
COND =(16,ST,STEP 2)无效 - ST不是有效条件。有效的测试:
EQ - equal
LT - less than
LE - less than or equal to
NE - not equal
GT - greater than
GE - greater than or equal to
要进行单步运行,不管是什么,从前面的步骤条件代码,你可以编写COND =(0,GT),这意味着“如果0比以往任何回报更高代码(它不会),请跳过这一步。'。
为了安全起见,你可以编写代码:
COND=((0,GT),EVEN)
的甚至会导致即使前面的步骤异常终止这个步骤来执行。
使用COND=EVEN
有潜在的缺陷,即使上一步ABENDS,STEP仍将运行。编码COND=(0,GT,STEP2)
应该允许该步骤运行,但如果存在ABEND,则不允许该步骤运行。
或者你可以使用IF/THEN/ELSE/ENDIF
编码。
例如
//STEP2 EXEC PGM=NDM
//IF STEP2.RC >= 0 THEN
//STEP3 EXEC PGM=???
//ENDIF
或
//STEP2 EXEC PGM=NDM
//IF STEP2.RC GE 0 THEN
//STEP3 EXEC PGM=???
//ENDIF
即或者>=
或GE
都可以使用。
你会发现这是很有帮助的IF/THEN/ELSE/ENDIF Statement Construct
或为COND参数COND Parameter
我会按照Mikes的建议去IF/THEN/ELSE语句。条件代码是一个不合时宜的时代,应该不惜一切代价避免。这是我的意见无论如何;) –
我第二上述建议。 – zarchasmpgmr
我第三个建议。 IF/THEN/ELSE/ENDIF明显易于维护和理解。 – cschneid
我用COND = EVEN,它解决了我的问题。非常感谢。 出于好奇,我的方法有什么问题? –