有我JCL 3個步驟:無論上一步的RC是什麼,我都想執行一個JCL步驟?
步驟1:過程 第2步:NDM STEP 3:刪除輸出NDM
後,我要實現什麼目標? 無論第2步的返回碼是什麼,我都想執行STEP 3。
我試過這個: COND =(16,GT)和COND =(16,ST,STEP 2)但它沒有做我想做的事。
有我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,它解決了我的問題。非常感謝。 出於好奇,我的方法有什麼問題? –