В моем JCL есть 3 шага:
ШАГ 1: обработать ШАГ 2: NDM ШАГ 3: УДАЛИТЬ ВЫВОД после NDM
Чего я хочу добиться? Я хочу выполнить ШАГ 3 независимо от кода возврата шага 2.
Я пробовал это: COND=(16,GT) и COND=(16,ST,STEP 2), но это не то, что я хочу.
В моем JCL есть 3 шага:
ШАГ 1: обработать ШАГ 2: NDM ШАГ 3: УДАЛИТЬ ВЫВОД после NDM
Чего я хочу добиться? Я хочу выполнить ШАГ 3 независимо от кода возврата шага 2.
Я пробовал это: COND=(16,GT) и COND=(16,ST,STEP 2), но это не то, что я хочу.
Попробуйте COND=EVEN в операторе EXEC вашего последнего шага.
Из документации:
COND=EVEN указывает MVS выполнять этот шаг задания, ДАЖЕ, ЕСЛИ предыдущий шаг того же задания прерывается, если только задание не отменено оператором MVS.
Также есть COND=ONLY:
COND=ONLY указывает MVS выполнять этот шаг задания, ТОЛЬКО ЕСЛИ предыдущий шаг в том же задании прерывается.
Объяснение УСЛОВИЯ:
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)
поскольку EVEN приведет к выполнению этого шага, даже если предыдущий шаг ABEND.
Использование COND=EVEN
имеет потенциальную ловушку, заключающуюся в том, что STEP будет выполняться, даже если предыдущий шаг ОТМЕНЯЕТСЯ. Кодирование COND=(0,GT,STEP2)
должно разрешать выполнение шага, но не при наличии ABEND.
В качестве альтернативы вы можете использовать кодирование IF/THEN/ELSE/ENDIF
.
e.g.
//STEP2 EXEC PGM=NDM
//IF STEP2.RC >= 0 THEN
//STEP3 EXEC PGM=???
//ENDIF
or
//STEP2 EXEC PGM=NDM
//IF STEP2.RC GE 0 THEN
//STEP3 EXEC PGM=???
//ENDIF
то есть можно использовать либо >=
, либо GE
.
Вам может оказаться полезным Конструкция оператора IF/THEN/ELSE/ENDIF
или для параметра COND COND Параметр