每月,我需要运行一组JCL。这些JCL具有一些我需要每月更改的硬编码参数(例如:源文件的年/月)。 另一方面,需要为许多源文件运行这些JCL:
LEA.D.1804.L03
LEA.D.1804.L04
LEA.D.1804.L05
依旧......
以下是JCL的摘录:
//*---------------------------------------------------------------------
//STEP01 EXEC PGM=OSGENER
//*---------------------------------------------------------------------
//SYSPRINT DD SYSOUT=T
//*
//SYSUT1 DD DSN=LEA.D.1804.L03,DISP=SHR
//*
//SYSUT2 DD DSN=LEA.L03.DAT,UNIT=SYSDA,DISP=(,PASS),
// DCB=(RECFM=FB,LRECL=135,BLKSIZE=0),SPACE=(CYL,16,RLSE)
//SYSIN DD *
RCOUT 4,,'016011'
RCOUT 4,,'016012'
RCOUT 4,,'016021'
COPY
我相信(并且希望)必须有某种方法来使用params而不是这些带有编码的值。 我认为我可以使用rexx以编程方式调用这些JCL,循环源文件。
首先,这可能吗?
如何在我的JCL中使用vars / params而不是使用harcoded值?
(我也知道有一种称为文件剪裁的东西,但我无法理解我应该如何使用它)
我来自PHP,Java,Javascript和那些langs堆栈。请尽可能清楚明确。
谢谢!
答案 0 :(得分:2)
我将假设文件定制不是必需的,因为没有必要解决您的问题。
我的建议是对一个程序进行编码,编目或内插,然后使用不同的参数执行它。
//MYPROC01 YY=SUPPLYTWODIGITYEAR,
// MM=SUPPLYTWODIGITMONTH,
// LLQ=SUPPLYLOWLEVELQUALIFIER
//*
//*---------------------------------------------------------------------
//STEP01 EXEC PGM=OSGENER
//*---------------------------------------------------------------------
//SYSPRINT DD SYSOUT=T
//*
//SYSUT1 DD DSN=LEA.D.&YY.&MM..&LLQ,DISP=SHR
//*
//SYSUT2 DD DSN=LEA.&LLQ..DAT,UNIT=SYSDA,DISP=(,PASS),
// DCB=(RECFM=FB,LRECL=135,BLKSIZE=0),SPACE=(CYL,16,RLSE)
//SYSIN DD *
RCOUT 4,,'016011'
RCOUT 4,,'016012'
RCOUT 4,,'016021'
COPY
//*
// PEND
//*
//LLQ3 EXEC PROC=MYPROC01,YY=&LYR2,MM=&MON,LLQ=L03
//LLQ4 EXEC PROC=MYPROC01,YY=&LYR2,MM=&MON,LLQ=L04
//LLQ5 EXEC PROC=MYPROC01,YY=&LYR2,MM=&MON,LLQ=L05
//*
这只是徒手画,不保证我没有引入拼写错误
&LYR2
和&MON
动态系统符号are new with z/OS 2.3,以及程序获得了在此之前的几个版本中容纳插播数据的功能。
如果没有使用系统符号的能力,我建议与负责在您的商店安排工作的人交谈。大多数大型机商店都有一个作业调度包,这些包具有强大的日期处理功能。
答案 1 :(得分:0)
在我们的网站中,我们确实有一些以月为单位运行的工作,唯一不断变化的参数是Month&年(MMMYY格式:APR18)。这些工作安排在Control-M中。 MMM&要在JCL符号覆盖中使用的YY变量由Control-M根据当前月/年设置。
%%IF %%OMONTH EQ 01
%%SET %%MON = JAN
%%GOTO ENDIT
%%ENDIF
%%IF %%OMONTH EQ 02
%%SET %%MON = FEB
%%GOTO ENDIT
%%ENDIF
%%IF %%OMONTH EQ 03
%%SET %%MON = MAR
%%GOTO ENDIT
%%ENDIF
%%IF %%OMONTH EQ 04
%%SET %%MON = APR
%%GOTO ENDIT
%%ENDIF
%%IF %%OMONTH EQ 05
%%SET %%MON = MAY
%%GOTO ENDIT
%%ENDIF
%%IF %%OMONTH EQ 06
%%SET %%MON = JUN
%%GOTO ENDIT
%%ENDIF
%%IF %%OMONTH EQ 07
%%SET %%MON = JUL
%%GOTO ENDIT
%%ENDIF
%%IF %%OMONTH EQ 08
%%SET %%MON = AUG
%%GOTO ENDIT
%%ENDIF
%%IF %%OMONTH EQ 09
%%SET %%MON = SEP
%%GOTO ENDIT
%%ENDIF
%%IF %%OMONTH EQ 10
%%SET %%MON = OCT
%%GOTO ENDIT
%%ENDIF
%%IF %%OMONTH EQ 11
%%SET %%MON = NOV
%%GOTO ENDIT
%%ENDIF
%%IF %%OMONTH EQ 12
%%SET %%MON = DEC
%%GOTO ENDIT
%%ENDIF
%%LABEL ENDIT
以上行通常在JCL中注释掉,并且它们仅在Control-M系统上有效。在JCL中,我们将以下Control-M变量名称(%% MON& %% OYEAR)分配给MMMYY符号覆盖。
MMMYY=%%MON.%%OYEAR
在JCL的运行时,值被替换。这些作业在Control-M中安排在一个月的特定时间运行,他们不需要手动干预。希望这可以帮助。
正如cschneid所说,我强烈建议您与您网站上的调度程序取得联系。