JCL: оператор IF с оператором SET - PullRequest
0 голосов
/ 24 сентября 2018

Я установил FLAG как 1, и я выполняю ARG, значение должно быть только DEV.Но я получаю как ARG = DEV + CLIENTID

000023 //         FLAG=1

000026 // IF (&FLAG=1) THEN        
000027 //SET1     SET ARG=DEV         
000028 // ELSE        
000029 //SET2     SET ARG=DEV+&CLIENT 
000030 // ENDIF                       

Это означает, что JCL присваивает значение в RUNTIME (перед проверкой условия IF).

Пожалуйста, помогите мне разобраться.

Спасибо!Bharathi

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

То, что сказал @hogstrom, верно.Оператор JCL IF проверяет Step Return codes, а не Значения переменных :

//IFBAD     IF  (ABEND | STEP1.RC > 8) THEN

Исходя из сказанного, вы можете использовать переменную в операторе include

Включить с переменной

//  INCLUDE MEMBER=OPT&FLAG

и настроить членов в проклибе

MEMBER = OPT1

  // SET ARG=DEV 

MEMBER = OPT2

  // SET ARG=DEV+&CLIENT 

Youнеобходимо установить включение для каждого возможного значения & FLAG , и оно очень длинное для одного SET.Он чаще используется, когда вы можете установить лотов переменных, таких как:

// INCLUDE MEMBER=ENV&ENV

, где & ENV = PROD \ TEST и т. Д.

Ваш случай

Не используйте флаг, просто установите переменную:

// SET ARG=DEV

или

// SET ARG=DEV+&CLIENT 
0 голосов
/ 24 сентября 2018

В руководстве JCL содержится некоторая полезная информация для понимания цели IF / THEN / ELSE.

Вот несколько пунктов из руководства:

  • Конструкция оператора IF / THEN / ELSE / ENDIF не управляет обработкой JCL;скорее, он условно контролирует
    выполнение шагов задания.
  • Результат обработки конструкции оператора IF / THEN / ELSE / ENDIF после определения остается неизменным независимо от результата выполнения любых оставшихся шагов в задании.Система не пересматривает исходное состояние при более позднем завершении шага задания, нормальном или ненормальном.См. Пример 9.
  • Система распределяет все операторы DD, определенные для шага, если оценка времени выполнения реляционного выражения определяет
    , что шаг должен быть выполнен.Все наборы данных, определенные в операторах DD в задании, должны быть доступны во время выбора задания для выполнения.
  • Вы можете вкладывать конструкции IF / THEN / ELSE / ENDIF максимум до 15 уровней.Вы можете указать символические параметры в операторах IF / THEN / ELSE / ENDIF при условии, что они разрешаются в одно из поддерживаемых ключевых слов реляционного выражения.Любые другие символические параметры, даже если они приняты системой, не предназначены или не поддерживаются.

То, что вы делаете, кажется логичным, но это не предназначение JCL SET и условной логики.

В вашем случае последний выполненный SET - это то, что используется и почему вы видите DEV + CLIENTID

...