2017-08-10 93 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