Передать символ JCL в потоковые наборы данных - PullRequest
4 голосов
/ 09 августа 2011

Я пытаюсь создать и удалить набор данных с символом JCL в имени набора данных следующим образом:

//    SET DATE=20110809
//* DELETE DATASET
//DEL01 EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN    DD *
           DELETE DATASET.TEMP.&DATE                PURGE
           SET MAXCC = 0
//* CREATE DATASET
//STEP01   EXEC PGM=IEFBR14
//DELDD    DD DSN=DATASET.TEMP.&DATE,
//            DISP=(NEW,CATLG,DELETE)

Проблема заключается в том, что я не могу использовать символ JCL внутри instream (SYSIN DD *). Я не могу быть уверен, что набор данных уже существует, поэтому я не могу просто использовать DISP = (MOD, DELETE, DELETE). Есть ли другой способ удалить набор данных?

Ответы [ 2 ]

7 голосов
/ 09 августа 2011

JCL не поддерживает подстановку символов во встроенных данных, как вы узнали ...

У вас должно работать следующее:

//DEL01   EXEC PGM=IEFBR14          
//DELDD    DD DSN=DATASET.TEMP.&DATE, 
//         DISP=(MOD,DELETE,DELETE), 
//         SPACE=(TRK,0)             

Добавить параметр SPACE . Если набор данных не существует, он будет создан из-за расположения MOD . затем он будет удален после завершения шага. В результате после этого шага указанный набор данных не будет существовать.

Единственная реальная проблема, с которой я вижу это:

//    SET DATE=20110809

Дата, которую вы даете, имеет длину 8 символов (максимальная длина квалификатора), но не начинается с алфавитный или национальный символ (начинается с цифры). Это приведет к неверному имя набора данных. Определитель DATE набора данных станет слишком длинным, если вы просто добавите к нему альфа-префикс. Общий подход к этой проблеме заключается в использовании юлианских дат, таких как: 2011221. Префикс юлианской даты с альфа или национальный символ как в: D2011221. Таким образом, ваша директива SET станет примерно такой:

//    SET DATE=D2011221

И все должно получиться.

6 голосов
/ 11 октября 2013

Начиная с z / OS 2.1 (выпущено 30 сентября 2013 г.), использование символов в данных потока JES2 возможно путем добавления ключевого слова SYMBOLS в оператор DD. Возможные значения:

  • SYMBOLS=JCLONLY: заменяет символы JCL и символы JES в данных в потоке.

  • SYMBOLS=EXECSYS: заменяет символы JCL, символы JES и системные символы, определенные в системе во время выполнения задания .

  • SYMBOLS=CNVTSYS: заменяет символы JCL, символы JES и системные символы, определенные в системе во время преобразования JCL .

Символы должны быть экспортированы.

Пример из [2] выглядит следующим образом:

// EXPORT SYMLIST=(DSN,VOL)
// SET DSN='ABC.DATA',VOL='123456'
//STEP1 EXEC PGM=USERPGM1
//DATA     DD DSN=&DSN,DISP=SHR
//SYSIN    DD *,SYMBOLS=EXECSYS
  SYSTEM=&SYSNAME,DSNAME=&DSN,VOLUME=&VOL
  FUNCTION='&APPL_NAME'
/*

Для получения дополнительной информации, включая синтаксис для настройки, куда идет журнал замены символов, см .:

...