《大型机学习之具体技术之-JCL练习二》
由于种种原因,在前天结束了培训的昨天又安排了一次补课,内容是PL/I,可是基础本来不好,多做一天练习用处其实不大。当时需要的一个小操作是在大机上从老师的用户编目下拷一个顺序数据集到我自己的用户编目下的一个分区数据集下来,然后使之成为该分区数据集的一个成员,但是我不知道怎么做,尽管前面做过关于数据集的具体操作的总结,但是还是不行,所以我就叫老师过来问,老师一过来就用他超级熟练的手法瞬间完成了任务,速度之快,我根本就没看清他怎么操作的,然后他还轻轻的摇头叹道-“你们怎么连最基本的操作都没有掌握。。。”其实我想这个操作放班上,估计至少一半人是不会的,所以说也不是我的问题。。。亏得我前面看了点东西,然后又恰好瞄到他在命令中数据集的名字上加了个引号,我就明白我错在哪里了。现在总结到下面:
完成把一个顺序数据集拷贝到一个分区数据集下使之成为该分区数据集的成员的方法是:首先(好像)不能说有种操作会直接完成这个任务,而是要先在目标分区数据集下新建一个成员,进入成员的编辑环境,然后在编辑环境的COMMAND行输入命令 COPY ‘SOURCE DS’ 然后你就会看到那个源数据集中的数据都被拷贝到这儿了,然后你保存就可以了。所以这应该算一种间接的方法吧。直接的方法老师当时没跟我讲,我也不知道有没有。。。
上次进行了JCL的初步练习,今天接着进行,下面是一个调用IEBGENER程序来进行顺序数据集拷贝的代码:
//CCM417C JOB ,'JOHNNY',MSGLEVEL=(1,1),NOTIFY=CCM417
//******************************************************
//* THIS JCL COPY A PS DS TO ANOTHER PLACE *
//******************************************************
//COPYSTEP EXEC PGM=IEBGENER
//SYSPRINT DD SYSOUT=*
//SYSUT1 DD DSN=CCM417.COPYSOR.PS,DISP=SHR
//SYSUT2 DD DSN=CCM417.COPYDIR.PS,DISP=(NEW,CATLG,DELETE),
// SPACE=(TRK,(10,2)),RECFM=FB,LRECL=80,UNIT=SYSDA
//SYSIN DD DUMMY
//
当然执行这个代码时,你应该自己创建一个源文件并用它的名字来代替CCM417.COPYSOR.PS,然后目标数据集也应该自己命一个名字。
下面来个稍复杂一点的,就是本文刚开始时完成的那个拷贝一个顺序数据集到一个分区数据集下,使之成为分区数据集的成员,用JCL完成之,代码如下:
***************************** Top of Data **************************
//CCM417C JOB ,JOHNNY,MSGLEVEL=(1,1),NOTIFY=CCM417
//**************************************************
//* THIS JCL COPY A PS DS TO A PDS,AND MAKE IT TO *
//* BE THE MEMBER OF THAT PDS ! *
//**************************************************
//COPSTEP EXEC PGM=IEBGENER
//SYSPRINT DD SYSOUT=*
//SYSUT1 DD DSN=CCM417.COPYSOR.PS,DISP=SHR
//SYSUT2 DD DSN=CCM417.COPYDIR.PO(MEM1),DISP=(NEW,CATLG,DELETE),
// SPACE=(TRK,(1,1)),RECFM=FB,LRECL=80,UNIT=SYSDA
//SYSIN DD DUMMY
//
**************************** Bottom of Data ************************
因为源数据集CCM417.COPYSOR.PS在上一个做上一个例子的时候就已经建好了,所以我只建了目标分区数据集 CCM417.COPYDIR.PO 然后我想它应该会自动完成COPY,将源数据集拷进去放下就得了,但是却没有成功,然后我去SDSF下面,用FIND 命令找到我的任务,在前面打?,然后发现有三个数据集:JESMSGLG,JESJCL,JESYSMG,其中在第一个数据集前面用S进去看到了-JES2 JOB LOG,我觉得其中没有什么重要的信息,然后到第二个中,原来就是我的源JCL代码,最后第三个看名字就比较靠谱,进去果然找到了重要信息:
IGD17101I DATA SET CCM417.COPYDIR.PO
NOT DEFINED BECAUSE DUPLICATE NAME EXISTS IN CATALOG
RETURN CODE IS 8 REASON CODE IS 38 IGG0CLEH
哦,原来不能往已有的分区数据集中拷东西进去,那我想这么做的时候又怎么办呢?先不管,先把自己建的那个分区数据集删掉又SUBMIT了一次,然后就正常了,系统替我新建了一个分区数据集,然后在其中生成了一个MEM1的成员,然后其中把源数据集的内容拷进去了。当然上面的代码中要改一下:
// SPACE=(TRK,(1,1)),RECFM=FB,LRECL=80,UNIT=SYSDA
这句要改成:
// SPACE=(TRK,(1,1,1)),RECFM=FB,LRECL=80,UNIT=SYSDA
但是还是那个问题:我想把一个源数据集拷贝到一个已存在的分区数据集中,使之成为成员该怎么办呢?
那个问题且先放下,不久应该就可以解决。因为我知道有一个系统实用程序是IEBCOPY,估计使用它可以完成这个任务。
下面再来个IEBGENER的:
从一个顺序数据集中读取数据显示出来:
****** ***************************** Top of Data ******************
000100 //CCM417D JOB ,JOHNNY,MSGLEVEL=(1,1),NOTIFY=CCM417
000110 //*************************************************
000120 //* THIS JCL READ AND DISPLAY A PS DS DATA *
000150 //*************************************************
000200 //COPSTEP EXEC PGM=IEBGENER
000300 //SYSPRINT DD SYSOUT=*
000400 //SYSUT1 DD DSN=CCM417.COPYSOR.PS,DISP=SHR
000500 //SYSUT2 DD SYSOUT=*
000600 //SYSIN DD DUMMY
000700 //
****** **************************** Bottom of Data ****************
这个程序的输出是由SYSUT2所指定的地点,也就是要看结果得去SDSF的ST下面然后找到你的数据集,进入?选项,然后就有一项为SYSUT2,S进去就看到了在数据集中的你所想要显示的内容。
算了,今天就看到这儿,明天还要去公司办理入职手续,哇卡卡,不知道大家穿上正装一个个会是什么熊样哈。。。