我使用了下面的jcl:
//STEP1 EXEC PGM=IEBGENER
//SYSUT1 DD DUMMY,RECFM=FB,LRECL=80
//SYSUT2 DD DSN=RK.MYDIR.FILES(NEW1),DISP=(SHR)
//SYSPRINT DD SYSOUT=*
//SYSIN DD DUMMY
我能够创造它。但我无法理解这里的代码。是否有可能使用IEFBR14创建。如果不是这就是正确的方式。请告诉我代码。谢谢
答案 0 :(得分:8)
使用IEFBR14无法完成
这是帮助解释IEBGENER的参考: http://publib.boulder.ibm.com/infocenter/zos/basics/index.jsp?topic=/com.ibm.zos.zdatamgmt/zsysprogc_utilities_IEBGENER.htm
答案 1 :(得分:4)
如果您对其原因感兴趣,请了解IEFBR14实际上并未打开您在JCL中编写的任何DD语句。相反,它只是驱动系统分配(和释放)例程的简便方法。实际上,如果您要查看iEFBR14的汇编列表,您会发现它只有两条指令:将R15返回码设置为零,然后退出。
通过批处理,我们的想法是系统(JES加上批处理启动器)应该在应用程序启动之前完成大量工作。因此,如果您分配一个新数据集,或者引用(比方说)需要时间让操作员安装的磁带设备,系统会在您的程序启动之前为您完成所有这些操作。 IEFBR14是一种使用系统分配例程使用JCL的这些功能来分配文件的便捷方式。
但是在JCL中访问PDS数据集时有一个问题,就像你想要做的那样。
当你在JCL中指定DSN(MEMBER)语法时,分配例程并不特别关心MEMBER部分 - 结果是,这不是发起者的功能,而是在OPEN / CLOSE中实现。在您的示例中,分配验证数据集是否存在(因为您编写了DISP = SHR),并且当程序打开DD语句时,OPEN例程会自动发出BPAM FIND / POINT / STOW以使您进入指定的PDS成员。这就是你的PDS成员的创建方式,因此你需要使用一个实际打开文件的程序(IEBGENR,IEBUPDTE,IEBCOPY,IDCAMS等都可以工作)。
一个小小的无关评论是您可能需要小心使用DISP = SHR更新数据集(尤其是PDS)。如果你设法弄错了时间,理论上可以在同一时间运行其中两个工作,这可能会导致数据集损坏。除非您确定您是访问PDS的唯一任务,否则在这种情况下使用DISP = OLD会更安全。
答案 2 :(得分:1)
如果您想一次创建多个成员,我建议使用IEBUPDTE。
来自IBM:
这个基本示例使用IEBUPDTE将两个JCL过程添加到名为MY.PROCLIB的数据集中:
//ADDPROC1 JOB 1,SMCHUGH,MSGCLASS=X
// EXEC PGM=IEBUPDTE
//SYSPRINT DD SYSOUT=*
//SYSUT1 DD DISP=OLD,DSN=MY.PROCLIB
//SYSUT2 DD DISP=OLD,DSN=MY.PROCLIB
//SYSIN DD DATA
./ ADD LIST=ALL,NAME=MYJOB1
//STEP1 EXEC=SUZNX1
//PRINT DD SYSOUT=A
// (more JCL for MYJOB1)
//SYSUDUMP DD SYSOUT=* (last JCL for MYJOB1)
./ REPL LIST=ALL,NAME=LASTJOB
//LIST EXEC PGM=SUZNLIST
// (more JCL for this procedure)
//* LAST JCL STATEMENT FOR LASTJOB
./ ENDUP
/*
这会创建一个新成员MYJOB1,但您可以看到它也可以替换成员(LASTJOB)。
答案 3 :(得分:1)
如果要将DSN的内容复制到新成员中,请使用IEBGENER。
要动态设置新DSN的属性,请使用LIKE参数。
例如(使用上面的Mikes示例)
//STEP1 EXEC PGM=IEBGENER
//SYSUT1 DD DISP=SHR,DSN=your.input.dataset
//SYSUT2 DD DISP=(,CATLG,DELETE),DSN=your.output.dataset,
// LIKE=your.input.dataset
//SYSPRINT DD SYSOUT=*
//SYSIN DD DUMMY <-- no CONTROL statements
LIKE属性允许您使用指定数据集的属性轻松创建新数据集,我还更改了处置以反映应将新DSN设置为什么。
答案 4 :(得分:1)
警告! - 重新使用IEBGENER和SYSUT2 DD DSN = PDS(会员):不要忘记指定MEMBER名称 - 如果你这样做,IEBGENER将从SYSUT1中找到的任何内容覆盖你的PDS,从头开始破坏你的PDS目录!
答案 5 :(得分:0)
IEBGENER实用程序用于复制单个文件。
SYSUT1 DD名称用于提供要从中复制的INPUT或文件。
SYSUT2 DD名称是OUTPUT文件。
SYSIN DD提供CONTROL语句(如果有的话)。
//STEP1 EXEC PGM=IEBGENER
//SYSUT1 DD DISP=SHR,DSN=your.input.dataset
//SYSUT2 DD DISP=SHR,DSN=your.output.dataset
//SYSPRINT DD SYSOUT=*
//SYSIN DD DUMMY <-- no CONTROL statements
请注意,文件/数据集可以是顺序数据集,也可以是分区数据集的成员。
//SYSUT1 DD DISP=SHR,DSN=your.input.dataset(member)
//SYSUT2 DD DISP=SHR,DSN=your.output.dataset(member)