2012-03-23 63 views
0

我遇到了下面的情況,我對confd參數如何工作以前的步驟感到困惑。jcl中刷新的步驟返回代碼

例如......

//步驟1 EXEC
//步驟2 EXEC COND =(0,NE,步驟1)
//步驟3 EXEC COND =(0,NE ,step2)

在上述一個輸入文件step1的情況下,RC是4,因此Step2被刷新,但是執行了步驟3。
這是我感到困惑的地方,jcl會將刷新的步驟rc看作0,或者即使沒有執行step2也會導致step3執行。

對此的任何解釋都表示讚賞,並感謝提前。

回答

5

documentation ...

使用COND參數測試返回代碼從以前的工作步驟 並確定是否要跳過此作業步驟。您可以在COND參數上指定一個或 更多測試,並且您可以測試來自 特定作業步驟或已完成 處理的每個作業步驟的返回代碼。如果滿足任何測試條件,則系統 將COND參數評估爲true並繞過作業步驟。如果 沒有在COND參數上指定的測試條件滿足 ,系統將COND參數評估爲false,並且 執行作業步驟。

系統對 當前執行作業的返回代碼執行COND參數測試。 如果測試返回先前 繞過的步驟,則系統將測試評估爲false。

請注意文本我已斜體。因爲「系統將測試評估爲假」,所以執行作業步驟。換句話說,EXEC語句的COND參數按照記錄工作。至於爲什麼這個參數被設計成以這種方式工作,恐怕我在40多年前發明它時並沒有在這個領域工作,因此不能說明原始開發者的推理。

您可能想要查看IF statement,它提供了測試除了測試其返回代碼之外是否運行給定步驟的能力。

//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 
+0

非常感謝你......現在我得到的問題。 – 2012-03-26 09:18:39