2017-08-10 90 views

回答

3

在您最后一步的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) 

的甚至会导致即使前面的步骤异常终止这个步骤来执行。

+0

我用COND = EVEN,它解决了我的问题。非常感谢。 出于好奇,我的方法有什么问题? –

5

使用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

+1

我会按照Mikes的建议去IF/THEN/ELSE语句。条件代码是一个不合时宜的时代,应该不惜一切代价避免。这是我的意见无论如何;) –

+0

我第二上述建议。 – zarchasmpgmr

+0

我第三个建议。 IF/THEN/ELSE/ENDIF明显易于维护和理解。 – cschneid