Можем ли мы добавить символические параметры в члены PDS, используемые в каталогизированных процедурах? - PullRequest
3 голосов
/ 23 сентября 2011

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


Ниже мой JCL

//A JOB (@),'CALL DB2',NOTIFY=&SYSUID
//JS010 EXEC TESTPROC

Ниже мой TESTPROC

//TESTPROC
//PS010 EXEC PGM=IKJEFT01,,DYNAMNBR=20
//STEPLIB DD DSN=TEST.LOADLIB,DISP=SHR
//SYSTSPRT DD SYSOUT=*                     
//SYSPRINT DD SYSOUT=*                     
//SYSUDUMP DD SYSOUT=*                     
//SYSTSIN  DD DSN=TEST.PDS(TESTPGM), 
//            DISP=SHR            
//SYSOUT DD SYSOUT=*

ниже приведены мои данные SYSTIN --TESTPGM

DSN SYSTEM(TEST)                    
RUN PROGRAM(TESTPGM) PLAN(TESTPLAN)
END 

Мой запрос: можно ли использовать символические параметры вместо TESTPGM и TESTPLAN в элементе данных SYSTIN TESTPGM?

С уважениемСайша:)

Ответы [ 3 ]

4 голосов
/ 23 сентября 2011

Как упомянуто ниже, вы можете сделать так, чтобы имя члена PDS стало символическим значением, а затем определить каждого члена в PDS, чтобы он указывал на другую программу.Используя ваш JCL в качестве примера:

//TESTPROC PROC MYPGM=
//PS010 EXEC PGM=IKJEFT01,,DYNAMNBR=20
//STEPLIB DD DSN=TEST.LOADLIB,DISP=SHR
//SYSTSPRT DD SYSOUT=*                     
//SYSPRINT DD SYSOUT=*                     
//SYSUDUMP DD SYSOUT=*                     
//SYSTSIN  DD DSN=TEST.PDS(&MYPGM), 
//            DISP=SHR            
//SYSOUT DD SYSOUT=*

В приведенном выше примере ваш оператор EXEC будет вызывать процесс как:

//JS010 EXEC TESTPROC,MYPGM=TESTPGM

Другой вариант, вы можете переопределить SYSTSIN DD напрямуюследующим образом:

//A JOB (@),'CALL DB2',NOTIFY=&SYSUID
//JS010 EXEC TESTPROC
//PS010.SYSTSIN DD *
DSN SYSTEM(TEST)                    
RUN PROGRAM(TESTPGM) PLAN(TESTPLAN)
END
/*
//

Еще одно предложение ... В вашей окончательной реализации вы можете рассмотреть возможность отделения

DSN SYSTEM(TEST)

от

RUN PROGRAM(TESTPGM) PLAN(TESTPLAN)
END

.причина в том, что вы можете запустить программу в нескольких средах DB2, а не только в SYSTEM (TEST).Для этого просто добавьте еще один параметр DB2SYS = и измените его следующим образом:

//TESTPROC PROC DB2SYS=MYTEST,MYPGM=
...
//SYSTSIN  DD DSN=TEST.PDS(&DB2SYS),DISP=SHR
//         DD DSN=TEST.PDS(&MYPGM),DISP=SHR

, где член PDS MYTEST уже имеет инструкцию DSN SYSTEM (TEST).

2 голосов
/ 23 сентября 2011

Короткий ответ - нет. Если у вас есть символические параметры в контрольных картах в PDS, на которые ссылается ваш оператор SYSTSIN DD, они (символические параметры) не будут разрешены.

Одним из способов решения этой проблемы является создание отдельной программы, выполняемой на отдельном шаге в вашей процедуре до шага PS010, который принимает параметры и текст и записывает временный файл. Символические параметры будут определены в PARM = этой программы.

//PS001    EXEC PGM=LOADPARM,PARM='DSN SYSTEM(&DSNSYS)'
//SYSPRINT DD  SYSOUT=*
//OUTPUT01 DD  DISP=(,PASS), 
//             DSN=&&DSNSYS, 
//             AVGREC=U, 
//             LRECL=80,  
//             RECFM=FB, 
//             SPACE=(80,1)
//****

Гипотетическая программа LOADPARM просто примет свой входной параметр и запишет его в OUTPUT01, стараясь заполнить его справа пробелами. В PS010 у вас будет SYSTSIN, который выглядит как ...

//SYSTSIN  DD  DISP=(OLD,DELETE),DSN=&&DSNSYS
//         DD  DISP=SHR,DSN=TEST.PDS(TESTPGM)

... где член TESTPGM выглядит как ...

RUN PROGRAM(TESTPGM) PLAN(TESTPLAN)
END

Таким образом, ваша каталогизированная процедура не знает, к какой подсистеме DB2 она обращается. Эта информация предоставляется в исполняющем JCL с символическим параметром DSNSYS.

Существуют и другие способы решения этой проблемы, например, у вас может быть символический параметр, который разрешает известный член в общем PDS, имея по одному члену в каждой подсистеме DB2.

0 голосов
/ 28 сентября 2011

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

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

...