如何在JCL中使用参数

And*_*hka 2 mainframe jcl rexx

当我进行硬编码时,我尝试提交工作,一切都很好。但我想使用参数。

//REPORTS   EXEC PGM=IKJEFT01,**PARM='SDSFINFO FTPSRV01 * hiqual'**
//SYSEXEC   DD DSN=rexx.is.here,DISP=(SHR,PASS)                 
//SYSTSPRT  DD SYSOUT=A,HOLD=YES                               
//SYSTSIN   DD DUMMY                                           
Run Code Online (Sandbox Code Playgroud)

我将 JCL 写为过程。流程发票中描述的参数是否真实?像这样:

  //stepxx  exec myproc,hiqual=hiqual,owner=*...
Run Code Online (Sandbox Code Playgroud)

csc*_*eid 5

有两种程序,编目程序和流内程序。

编目过程存储在与执行 JCL 分开的库成员中。这个单独的库是通过系统搜索在 中定义的此类库的列表来定位的SYS1.PARMLIB。该列表可以用JCLLIB执行 JCL 中的语句覆盖。您的商店可能有一个存储编目程序的标准位置。

流内过程与执行 JCL 位于同一库成员中。该PROC语句必须位于您的作业卡和EXEC执行指定过程的语句之间。流内过程必须以语句结束PEND

在过程中使用符号参数是很常见的,这使得它们更加灵活。

你正朝着正确的方向前进......

[jobcard is here]
//MYPROC    PROC 
//REPORTS   EXEC PGM=IKJEFT01,PARM='SDSFINFO FTPSRV01 &OWNER &HIQUAL'
//SYSEXEC   DD DSN=[rexx.is.here],DISP=(SHR,PASS)
//SYSTSPRT  DD SYSOUT=A,HOLD=YES
//SYSTSIN   DD DUMMY
//          PEND
//*
//MYSTEP    EXEC PROC=MYPROC,HIQUAL=ABC,OWNER=XYZ
Run Code Online (Sandbox Code Playgroud)

...方括号中的内容必须由您提供。这将导致 MYPROC 被执行,就像您进行了硬编码一样......

//REPORTS   EXEC PGM=IKJEFT01,PARM='SDSFINFO FTPSRV01 XYZ ABC'
//SYSEXEC   DD DSN=[rexx.is.here],DISP=(SHR,PASS)
//SYSTSPRT  DD SYSOUT=A,HOLD=YES
//SYSTSIN   DD DUMMY
Run Code Online (Sandbox Code Playgroud)

有时过程是用符号参数的默认值进行编码的......

//MYPROC    PROC ENV='PROD'
//REPORTS   EXEC PGM=IKJEFT01,PARM='SDSFINFO FTPSRV01 &OWNER &HIQUAL'
//SYSEXEC   DD DSN=&ENV..REXX,DISP=(SHR,PASS)
//SYSTSPRT  DD SYSOUT=A,HOLD=YES
//SYSTSIN   DD DUMMY
Run Code Online (Sandbox Code Playgroud)

...有时默认值是文档...

//MYPROC    PROC ENV='SPECIFY_PROD_OR_TEST_OR_QA'
//REPORTS   EXEC PGM=IKJEFT01,PARM='SDSFINFO FTPSRV01 &OWNER &HIQUAL'
//SYSEXEC   DD DSN=&ENV..REXX,DISP=(SHR,PASS)
//SYSTSPRT  DD SYSOUT=A,HOLD=YES
//SYSTSIN   DD DUMMY
Run Code Online (Sandbox Code Playgroud)

...强制执行 JCL 提供一个值,否则在运行时会出现 JCL 错误。

请注意,通过该SET语句,您可以使用符号参数,而无需编目过程或流内过程。这...

[jobcard is here]
//  SET HIQUAL=ABC
//  SET OWNER=XYZ
//*
//REPORTS   EXEC PGM=IKJEFT01,PARM='SDSFINFO FTPSRV01 &OWNER &HIQUAL'
//SYSEXEC   DD DSN=[rexx.is.here],DISP=(SHR,PASS)
//SYSTSPRT  DD SYSOUT=A,HOLD=YES
//SYSTSIN   DD DUMMY
//*
Run Code Online (Sandbox Code Playgroud)

...将给出与第一个示例相同的结果,而不使用过程。

通常会有您需要遵守的商店标准。通常大型机车间有一个专门的小组,其功能是运行生产作业流,每天调度数百或数千个此类作业流。