Операционные системы и программное обеспечение на платформе zSeries

       

Оператор EXEC


Оператор выполнения EXEC (его также называют оператором шага задания) служит для указания программы или процедуры JCL, которую необходимо выполнить, а также для установления параметров выполнения шага. В задании должен присутствовать как минимум один оператор EXEC, но их может быть и несколько.

Формат оператора EXEC:

//[имя_шага_задания] EXEC позиционный параметр [,ключевые параметры]

Позиционный параметр:

PGM = имя_программы | *.имя_шага.имя_DD [PROC=]имя_процедуры Ключевые параметры: [,PARM = (значение, значение,...)] [,REGION = nК | nM] [,ТIМЕ = (мин,сек)] [,COND=((код_завершения,условие[,имя_шага]),...,[EVEN|ONLY])] ...

Напомним: как и ранее, квадратные скобки означают, что параметр необязателен. Таким образом, единственным обязательным параметром оператора EXEC является позиционный параметр, задающий выполняемую программу (через ключевое слово PGM) или процедуру (через ключевое слово PROC или без него), остальные параметры необязательны. Необязательно и имя шага задания, однако при его отсутствии могут возникнуть трудности анализа сообщений системы (неясно, к какому шагу задания они относятся), а также невозможно будет сделать ссылку на данный шаг задания.

Параметр PGM определяет программу, которая должна быть выполнена в данном шаге задания. Например:

//EXEPRIM1 EXEC PGM=MYPROG

Вызываемая программа задается по имени раздела библиотечного набора данных, содержащего соответствующий загрузочный модуль. z/OS устанавливает определенный порядок поиска загрузочных модулей. По умолчанию поиск ведется в системных библиотеках загрузочных модулей, список которых определен в разделе LNKLST реестра SYS1.PARMLIB. Первой в этом списке обычно стоит библиотека SYS1.LINKLIB. В системных библиотеках находятся наиболее часто используемые программы общего назначения. Однако можно настроить задание на выборку загрузочных модулей из личных библиотек - библиотечных наборов данных, в которых хранятся программы пользователей. Личные библиотеки должны быть явно описаны в задании с помощью операторов DD с зарезервированными для этой цели именами JOBLIB или STEPLIB.
Рассмотрим пример:

//JOBA1 JOB (A21,DEP3,007),,CLASS=C //JOBLIB DD DSN=USERLIB1,DISP=SHR //STEP1 EXEC PGM=PRG1 //STEP2 EXEC PGM=PGM2 //STEPLIB DD DSN=USERLIB2,DISP=SHR

В задании определены две личные библиотеки: библиотека задания USERLIB1, описанная с помощью оператора DD с именем JOBLIB, и библиотека шага задания USERLIB2, описанная с помощью оператора DD с именем STEPLIB. В этом случае поиск программы PRG1 будет производиться в следующем порядке: USERLIB1, библиотеки списка LNKLST, а поиск программы PRG2 - сначала USERLIB2 (так как именно в этом шаге описана данная библиотека), затем USERLIB1 и, наконец, библиотеки LNKLST.

Если позиционный параметр описан как PGM=*.имя_шага.имя_DD, то программа вызывается из библиотеки загрузочных модулей, описанной в одном из предыдущих шагов задания. Здесь имя_DD - это имя оператора DD, в котором описывается библиотека загрузочных модулей, имя_шага указывает шаг задания, в котором находится упомянутый оператор DD. В приведенном ниже примере в шаге ST2 будет выполнена программа, загрузочный модуль которой хранится в разделе CALC библиотеки MYLIB, как указывает ссылка *.ST1.DSPROG:

//ST1 EXEC PGM=MYPROG //DSPROG DD DSNAME=MYLIB(CALC),DISP=SHR //ST2 EXEC PGM=*.ST1.DSPROG

Второй формат позиционного параметра оператора EXEC с использованием ключевого слова PROC или без него служит для выполнения процедуры в шаге задания. Процедура представляет собой последовательность операторов JCL, оформленных как автономная JCL-программа. Процедура может храниться в системной или пользовательской библиотеке процедур либо описывается непосредственно в задании. Список используемых системных библиотек процедур определяется системным программистом в настройках JES. Особенности использования и вызова процедур будут описаны ниже.

Рассмотрим ключевые параметры оператора EXEC при вызове программ (загрузочных модулей). При вызове процедур формат параметров несколько меняется, о чем будет сказано дополнительно.

Параметр PARM служит для передачи программе, выполняемой в шаге задания, определенной управляющей информации или исходных данных.





Эта информация передается в виде текстовой строки длиной не более 100 символов, которая обычно включает ряд значений (подпараметров), разделенных запятыми. Если через PARM передается список значений, то весь список должен заключаться в апострофы или круглые скобки. Приведем примеры различных вариантов определения параметра PARM:

  1. передача одного параметра:

    //STEP1 EXEC PGM=PR1,PARM=12 //STEP2 EXEC PGM=PR1,PARM=LOAD
  2. передача двух параметров:

    //STEP3 EXEC PGM=PR1,PARM=(LIST,NODECK) //STEP4 EXEC PGM=LOADER,PARM ='MAP,SIZE=150K' //PR1 EXEC PROC=РЕЗ,PARM='2000,YES'


Подпараметры, содержащие специальные знаки (например, русский текст, знак + и т. п.), следует заключать в апострофы или круглые скобки. Если апостроф встречается в подпараметре, то он повторяется дважды, например PARM = 'О''К!'. Информация, заключенная в апострофы, должна умещаться на одной строке, а заключенная в скобки может быть перенесена на другую строку.

Параметры REGION и TIME аналогичны параметрам оператора JOB с той лишь разницей, что в EXEC они определяют размер области виртуальной памяти и время выполнения для шага задания. Параметр TIME оператора JOB имеет преимущество перед параметром TIME оператора EXEC: если время, указанное параметром TIME оператора EXEC, превосходит время, установленное параметром TIME оператора JOB, то значение параметра TIME оператора EXEC игнорируется. Параметр REGION в операторе EXEC также игнорируется, если задан параметр REGION в операторе JOB. Примеры:

//SI EXEC PGM=A,REGION=40K //INT1 EXEC PGM=PR1,TIME=5 //INT2 EXEC PGM=PR1,TIME=(,45)

Параметр COND определяет условия для обхода шага задания. Он указывает, что возможность выполнения шага задания зависит от полученных значений кодов завершения на предшествующих шагах задания. Синтаксис параметра COND несколько отличается от аналогичного параметра оператора JOB:

COND = ((код_завершения,условие[,имя_шага])... [,EVEN|,ONLY])

Здесь наряду с подпараметрами код_завершения и условие, можно указывать имя одного из предыдущих шагов задания, по коду завершения которого будет вестись проверка (имя_шага).


Если имя_шага не указано, условие будет проверяться для всех предыдущих шагов. Подпараметры EVEN и ONLY следует использовать, когда выполнение текущего шага требуется поставить в зависимость от наличия в задании аварийно завершенных шагов (для таких шагов код завершения не сформирован). Подпараметр EVEN требует выполнять текущий шаг, даже если один из предыдущих шагов завершился аварийно, ONLY - только если один из предыдущих шагов завершился аварийно.

Параметр COND может содержать до восьми условий, включая EVEN и ONLY. Шаг задания не будет выполнен, если соблюдается хотя бы одно из заданных условий. Рассмотрим ряд примеров:

  1. шаг ST3 не выполняется, если 8 > RC шага ST1:

    //ST3 EXEC PGM=PROG3,COND=(8,GT,ST1)
  2. шаг ST6 не выполняется, если 8
    RC шага ST1 или 8
    RC шага ST2:

    //ST6 EXEC PGM=AP,COND=((8,LE,ST1),(8,LE,ST2))
  3. шаг ST9 не выполняется, если 16
    RC всех предыдущих шагов, или 90


    RC шага ST2, или ни один из предыдущих шагов не завершился аварийно:

    //ST9 EXEC PGM=AP,COND=((16,GE),(90,LE,ST2),ONLY)
  4. шаг ST7 не выполняется, если 10
    RC шага ST5, в противном случае шаг будет выполнен, даже если один из предыдущих шагов завершился аварийно:

    //ST7 EXEC PGM=AP,COND=((9,LT,ST5),EVEN)



Содержание раздела