Символические параметры в имени набора данных JCL - PullRequest
3 голосов
/ 20 февраля 2012

В JCL обычно символические параметры создаются с использованием & (знак амперсанда), за которым следует имя переменной.

Но в имени набора данных за ним следует знак точки после имени переменной.Пример:

//J&USER JOB 1
//MYSTEP EXEC PGM=MYPROG
//MYDATA DD DSN=&USER..MYCLASS.COOL

Почему это так?Я боюсь несогласованности позже, поэтому задаю этот вопрос.Спасибо за любую помощь заранее.

Ответы [ 2 ]

4 голосов
/ 20 февраля 2012

Так же, как начало символьного параметра отмечено амперсандом (&). Может быть прекращено пространство или период. Когда заканчивается точкой, период не является частью имени (так же, как открытие не амперсанд).

Когда вся строка заменяется символьным параметром, она просто кодируется как:

  // SET MYPROG=FRED
  //RUNIT EXEC PGM=&MYPROG

Здесь &MYPROG заменяется значением FRED. Нет проблем с выяснением, где символическое имя начиналось или заканчивалось. Теперь предположим, что вы хотите запустить 3 программы: FRED1, FRED2 и FRED3. Вы можете сделать что-то вроде:

  //RUN3 EXEC PGM=&MYPROG.3

Здесь запускается программа FRED3. Символ MYPROG завершается точкой и равняется FRED, к этому Остальная часть текста добавляется с получением FRED3.

То же самое относится и к использованию символических параметров в именах наборов данных. Первый период необходим для прекращения имя символа, следующий период является частью самого имени набора данных. Например, если символ USER оценивается как ABC123, затем

  //MYDSN DD DSN=&USER..MYDATA

оценивается как ABC123.MYDATA в качестве имени набора данных. Аналогичным образом,

  //MYDSN DD DSN=&USER.X.MYDATA

оценивается как: ABC123X.MYDATA Обратите внимание, что результирующий DSN имеет один период, потому что первый завершено символическое имя и не является частью результата.

4 голосов
/ 20 февраля 2012

Проще говоря, если за символическим параметром следует точка (.), То необходимо добавить дополнительный период (.), Что приведет к 2 периодам (.).

Исходя из вашего сценария, вы должны использовать два периода (.).

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

Пример:

Если & USER разрешен как USR01 , то он будет интерпретирован как

//JUSR01 JOB 1
//MYSTEP EXEC PGM=MYPROG
//MYDATA DD DSN=USR01.MYCLASS.COOL

В вашем наборе данных будет использоваться только второй период.

Но представьте, если у вас что-то подобное, что произойдет

//MYDATA DD DSN=&USER.MYCLASS.COOL

Набор данных будет выглядеть примерно так: USR01MYCLASS.COOL . Это ошибка, так как каждый уровень не должен содержать более 8 символов.

...