Символическая путаница JCL - PullRequest
4 голосов
/ 11 апреля 2009

Я немного запутался в том, как создать символическую переменную в JCL для назначения, которое я делаю в своем классе COBOL.

Например, я должен "Указать символический параметр для параметра PARM и указать TEST и APOST в качестве значения по умолчанию."

Как обозначить параметр «PARM» символическим параметром?

РЕДАКТИРОВАТЬ: простить недосмотр; кажется, что я забыл упомянуть, в какой ОС я работаю. Я пишу этот файл JCL в z / OS.

Заранее спасибо!

EDIT:

@ avisser:

Итак, вы говорите, что я могу просто назвать это "& PARM = 'TEST, APOST'" и, если я захочу изменить этот параметр, когда я запускаю этот процесс с другим оператором JCL, перечисленные пармы могут быть поменял с вызывающего JCL?

EDIT:

@ avisser:

Да, извините, мне действительно нужно поработать над тем, чтобы быть более конкретным ... В моем COBOL JCL я вызываю компилятор COBOL (IGYCRCTL), редактор связей (HEWL) и выборку программ (EXEC PGM =).

EDIT:

Возможно, это поможет увидеть, какой у меня вывод. Я действительно ценю всех тех, кто до сих пор пытался помочь.

Выход:

------ JES2 СТАТИСТИКА РАБОТЫ ------

       37 CARDS READ                                                                                                            

       61 SYSOUT PRINT RECORDS                                                                                                  

        0 SYSOUT PUNCH RECORDS                                                                                                  

        3 SYSOUT SPOOL KBYTES                                                                                                   

     0.00 MINUTES EXECUTION TIME                                                                                                

!! КОНЕЦ JES SPOOL FILE !! 1 // KC03CEFA JOB, 'MATT R', MSGCLASS = H, TYPRUN = SCAN JOB07731 // *
2 // STEP01 EXEC PGM = IGYCRCTL, & REGION = 248K,
// & PARM = 'ТЕСТ, АПОСТ'
3 // STEPLIB DD DSN = IGY340.SIGYCOMP, DISP = SHR
/ *
4 // SYSLIN DD & DSN = && OBJSET, UNIT = DISK, SPACE = (TRK, (3,3)),
// & DISP = (NEW, PASS, DELETE)
5 // SYSPRINT DD SYSOUT = *
6 // SYSUT1 DD UNIT = DISK, SPACE = (CYL, (1,1))
7 // SYSUT2 DD UNIT = ДИСК, ПРОБЕЛ = (CYL, (1,1))
8 // SYSUT3 DD UNIT = ДИСК, ПРОБЕЛ = (CYL, (1,1))
9 // SYSUT4 DD UNIT = ДИСК, ПРОБЕЛ = (CYL, (1,1))
10 // SYSUT5 DD UNIT = ДИСК, ПРОБЕЛ = (CYL, (1,1))
11 // SYSUT6 DD UNIT = ДИСК, ПРОБЕЛ = (CYL, (1,1))
12 // SYSUT7 DD UNIT = ДИСК, ПРОБЕЛ = (CYL, (1,1))
// *
// *
13 // STEP02 EXEC PGM = HEWL, & COND =, & REAGION = 2048K,
// & PARM =
14 // SYSLIB DD DSN = CEE.SCEELKED, DISP = SHR
15 // SYSLIN DD & DSN = && OBJSET, & DISP = (OLD, DELETE)
16 // SYSLMOD DD DSN = && TEMPLIB (PGM6),
// SPACE = (1024, (50,20,1)), UNIT = DISK,
// DISP = (NEW, CATLG, DELETE)
17 // SYSPRINT DD SYSOUT = *
18 // ПРИНТЕР DD SYSOUT = *
19 // SYSUT1 DD UNIT = DISK, SPACE = (TRK, (10,10))
// *
// *
20 // STEP01 EXEC PGM = PGM6, & PARM = TERMTHDACT (DUMP)
21 // STEPLIB DD DSN = && TEMPLIB, DISP = SHR
22 // CEEDUMP
23 // SYSUDUMP
24 // ПРИНТЕР DD SYSOUT = *
25 // PRODUCTS DD DSN = KC02322.CSCI465.SP09 (DATA1), DISP = SHR
26 // SYSIN DD *
!! КОНЕЦ JES SPOOL FILE !! СТМТ № СООБЩЕНИЕ 2 IEFC630I НЕИЗВЕСТНОЕ КЛЮЧЕВОЕ СЛОВО И РЕГИОН 2 IEFC630I НЕИЗВЕСТНОЕ КЛЮЧЕВОЕ СЛОВО И PARM 4 IEFC630I НЕИЗВЕСТНОЕ КЛЮЧЕВОЕ СЛОВО И DSN 4 IEFC630I НЕИЗВЕСТНОЕ КЛЮЧЕВОЕ СЛОВО И DISP 13 IEFC630I НЕИЗВЕСТНОЕ КЛЮЧЕВОЕ СЛОВО И КОНД 13 IEFC630I НЕИЗВЕСТНОЕ КЛЮЧЕВОЕ СЛОВО И РЕАГИОН 13 IEFC630I НЕИЗВЕСТНОЕ КЛЮЧЕВОЕ СЛОВО И PARM 15 IEFC630I НЕИЗВЕСТНОЕ КЛЮЧЕВОЕ СЛОВО И DSN 15 IEFC630I НЕИЗВЕСТНОЕ КЛЮЧЕВОЕ СЛОВО & DISP 20 IEFC630I НЕИЗВЕСТНОЕ КЛЮЧЕВОЕ СЛОВО И PARM 22 IEFC605I НЕИЗВЕСТНОЕ ОПЕРАЦИОННОЕ ПОЛЕ 23 IEFC605I НЕИЗВЕСТНОЕ ОПЕРАЦИОННОЕ ПОЛЕ !! КОНЕЦ JES SPOOL FILE !!

Ответы [ 2 ]

6 голосов
/ 11 апреля 2009

символические параметры - это имена, начинающиеся с амперсанда. При использовании в операторе JCL во время выполнения они преобразуются в предоставленное значение. Один из способов их создания (в z / OS) - использование

// SET name = value

декларация. Если вы используете PARM, вы должны разработать свою программу так, чтобы она могла работать с ней. Возможно, задание о том, как сделать , что (подсказка: раздел связи). Или JCL является частью вашего класса COBOL?

TEST и APOST выглядят для меня как директивы компилятора. Я не знаю, можете ли вы указать их в своей программе, на моем рабочем месте мы предоставляем их только при вызове компилятора.

EDIT:

Хорошо, это немного необычно для меня, так как мы склонны компилировать и запускать наши программы в отдельных потоках JCL. Но в любом случае.

Принимая ваше второе утверждение:

2 //STEP01 EXEC PGM=IGYCRCTL,&REGION=248K,
  // &PARM='TEST,APOST'

REGION и PARM - это так называемые позиционные параметры, и они являются ключевыми словами, на самом деле они не предназначены для представления в виде символических имен, хотя вы можете это делать (это объяснит сообщения «НЕИЗВЕСТНЫЙ КЛЮЧ»).
Обычное использование - когда это применимо - это предоставление символических имен для операндов из такие параметры. И, очевидно, вы должны сначала определить для них значение, например:

  // SET OPTIONS='TEST,APOST'
  //STEP01 EXEC PGM=IGYCRCTL,REGION=248K,
  // PARM=&OPTIONS
4 голосов
/ 13 апреля 2009

Хорошо, я немного покопался, и с помощью руководства, которое дал мне avisser, я смог понять, что мне нужно делать. Итак, для дальнейшего использования для тех, у кого может возникнуть этот вопрос (или один подобный), вот что я понял:

Шаг 1. Создайте «PROC» с переменными, которые вы будете использовать.

ех. Я хотел использовать переменные для «PARM» в моем компиляторе COBOL со значениями по умолчанию «TEST» и «APOST», поэтому я написал что-то вроде:

//PROC1  PROC  CPARM='TEST,APOST',

Шаг 2: Используйте эти вновь определенные символические параметры в вашем действительном шаге JCL. Символ «&» показывает, что все, что следует за ним, является символическим параметром.

ех. Я использовал вышеупомянутый «CPARM» для моего этапа компиляции COBOL:

//COB    EXEC  PGM=IGYCRCTL,REGION=&CREGION,  
//             PARM='&CPARM'

Шаг 3: Завершите свой «PROC» оператором «PEND» после вашего фактического шага.

ех. После того, как я перечислил все свои переменные и перечислил все шаги для компиляции (имя компилятора, где можно найти компилятор и, как видно непосредственно перед оператором PEND, операторы SYSUT1-SYSUT7), поместите ключевое слово PEND:

//SYSUT7   DD UNIT=DISK,SPACE=(CYL,(1,1))  
//         PEND

Шаг 4: Добавьте любые дополнительные шаги JCL и / или код в ваш исходный файл, и все готово!

Примечания:

-В одном файле JCL может быть несколько операторов PROC. У меня было три: один для компиляции COBOL, один для редактора связей и один для выборки программы. У меня также есть код COBOL в том же файле, в котором находятся мои инструкции PROC.

-Это произошло на мэйнфрейме IBM под управлением z / OS.

-Вверху видно, что моя переменная "CPARM" имеет значение по умолчанию "TEST, APOST". По умолчанию переменная может быть нулевой, просто оставив поле пустым (например, CPARM =,).

-Вы могли заметить, что после определения CPARM есть запятая; это потому, что у меня есть больше переменных после него. Пожалуйста, помните, что последний символический параметр, который вы создаете для любого данного PROC, не должен иметь ничего после него (т.е. без запятой). Конечно, вы можете поместить строку комментария (// *), другой PROC или реальный код после этого, но последний символический параметр не должен иметь ничего после него в той же строке.

...