我对如何在JCL中为我在COBOL类中执行的赋值创建符号变量感到有点困惑。
例如,我应该“为PARM选项指定一个符号参数,并将TEST和APOST指定为默认值”。
如何将"PARM“选项指定为符号参数?
编辑:请原谅我的疏忽;我似乎忘了提到我正在运行的是什么操作系统。我正在z/OS中编写这个JCL文件。
提前感谢!
编辑:
@avisser:
那么,您的意思是我可以直接将其命名为"&PARM='TEST,APOST'“,并且,如果我想在使用另一条JCL语句运行此proc时更改该参数,那么列出的参数可以从调用JCL中更改吗?
编辑:
@avisser:
是的,对不起,我真的需要更具体的工作……在我的COBOL JCL中,我调用了COBOL编译器(IGYCRCTL)、链接编辑器(HEWL)和程序获取(EXEC PGM=)。
编辑:
也许看看我的输出会有所帮助。到目前为止,我真的很感谢所有试图帮助我们的人。
输出:
- JES2作业统计
37 CARDS READ
61 SYSOUT PRINT RECORDS
0 SYSOUT PUNCH RECORDS
3 SYSOUT SPOOL KBYTES
0.00 MINUTES EXECUTION TIME !!JES假脱机文件结束!!1 //KC03CEFA作业,'MATT R',MSGCLASS=H,TYPRUN=SCAN JOB07731 //*
2 //STEP01 EXEC PGM=IGYCRCTL,®ION=248K, // &PARM='TEST,APOST' 3 //STEPLIB DD DSN=IGY340.SIGYCOMP,DISP=SHR /\* 4 //SYSLIN DD &DSN=&&OBJSET,UNIT=DISK,SPACE=(TRK,(3,3)), // &DISP=(NEW,PASS,DELETE) 5 //SYSPRINT DD SYSOUT=\* 6 //SYSUT1 DD UNIT=DISK,SPACE=(CYL,(1,1)) 7 //SYSUT2 DD UNIT=DISK,SPACE=(CYL,(1,1)) 8 //SYSUT3 DD UNIT=DISK,SPACE=(CYL,(1,1)) 9 //SYSUT4 DD UNIT=DISK,SPACE=(CYL,(1,1)) 10 //SYSUT5 DD UNIT=DISK,SPACE=(CYL,(1,1)) 11 //SYSUT6 DD UNIT=DISK,SPACE=(CYL,(1,1)) 12 //SYSUT7 DD UNIT=DISK,SPACE=(CYL,(1,1)) //\* //\* 13 //STEP02 EXEC PGM=HEWL,&COND=,&REAGION=2048K, // &PARM= 14 //SYSLIB DD DSN=CEE.SCEELKED,DISP=SHR 15 //SYSLIN DD &DSN=&&OBJSET,&DISP=(OLD,DELETE) 16 //SYSLMOD DD DSN=&&TEMPLIB(PGM6), // SPACE=(1024,(50,20,1)),UNIT=DISK, // DISP=(NEW,CATLG,DELETE) 17 //SYSPRINT DD SYSOUT=\* 18 //PRINTER DD SYSOUT=\* 19 //SYSUT1 DD UNIT=DISK,SPACE=(TRK,(10,10)) //\* //\* 20 //STEP01 EXEC PGM=PGM6,&PARM=TERMTHDACT(DUMP) 21 //STEPLIB DD DSN=&&TEMPLIB,DISP=SHR 22 //CEEDUMP 23 //SYSUDUMP 24 //PRINTER DD SYSOUT=\* 25 //PRODUCTS DD DSN=KC02322.CSCI465.SP09(DATA1),DISP=SHR 26 //SYSIN DD \*!!JES假脱机文件的结尾!!STMT编号消息2 IEFC630I UNIDENTIFIED®ION 2 IEFC630I UNIDENTIFIED &PARM 4 IEFC630I UNIDENTIFIED &DISP 4 IEFC630I UNIDENTIFIED &DISP13 IEFC630I UNIDENTIFIED &COND 13 IEFC630I UNIDENTIFIED KEYWORD &PARM 15 IEFC630I UNIDENTIFIED &PARM 15 IEFC630I UNIDENTIFIED KEYWORD &DISP20 IEFC630I UNIDENTIFIED KEYWORD &PARM 22 IEFC605I UNIDENTIFIED 23 IEFC605I UNIDENTIFIED FIELD!JES假脱机文件的结尾!!
发布于 2009-04-11 16:35:15
符号参数是名称前面有一个“与”符号。在JCL语句中使用时,它们会在运行时转换为提供的值。创建它们的一种方法(在z/OS上)是使用
// SET name = value
声明。如果你使用PARM,你应该设计你的程序,使它可以与PARM一起工作。也许作业是关于如何做到这一点的(提示:链接部分)。或者JCL是你的COBOL类的一部分吗?
TEST和APOST在我看来就像编译器指令。我不知道你是否可以在你的程序中指定它们,在我的工作场所,我们只在调用编译器时提供它们。
编辑:
这对我来说有点不寻常,因为我们倾向于在单独的JCL流中编译和运行我们的程序。但不管怎样。
接受你的第二个陈述:
2 //STEP01 EXEC PGM=IGYCRCTL,®ION=248K,
// &PARM='TEST,APOST'REGION和PARM是所谓的位置参数,它们是关键字,实际上并不意味着要以符号名称表示,尽管您可以自由地这样做(这将解释“未识别的关键字”消息)。
常见的用法(如果适用)是为此类参数的操作数提供符号名称。显然,你必须首先为它们定义一个值,例如:
// SET OPTIONS='TEST,APOST'
//STEP01 EXEC PGM=IGYCRCTL,REGION=248K,
// PARM=&OPTIONS发布于 2009-04-13 14:01:41
好吧,我做了一些挖掘,在avisser给我的指导下,我能够弄清楚我必须做什么。因此,对于任何可能有这个问题(或类似问题)的人,为了将来提供参考,我想出了以下结论:
步骤1:使用将要使用的变量创建一个"PROC“。
例如。我想在我的COBOL编译器中为"PARM“使用变量,它的默认值是"TEST”和"APOST",所以我写了类似这样的代码:
//PROC1 PROC CPARM='TEST,APOST',步骤2:在实际的JCL步骤中使用这些新定义的符号参数。"&“字符表示它后面的任何内容都是符号参数。
例如。我在COBOL编译步骤中使用了前面提到的"CPARM“:
//COB EXEC PGM=IGYCRCTL,REGION=&CREGION,
// PARM='&CPARM'第三步:在实际的步骤之后用"PEND“语句结束你的"PROC”。
例如。在我列出了所有变量并列出了编译的所有步骤(编译器名称、可以找到编译器的位置,以及在PEND语句之前可以看到的SYSUT1-SYSUT7语句)之后,放置您的PEND关键字:
//SYSUT7 DD UNIT=DISK,SPACE=(CYL,(1,1))
// PEND步骤4:在源文件中添加任何额外的JCL步骤和/或代码,您就可以成功了!
备注:
-You在一个JCL文件中可以有多个PROC语句。我有三个:一个用于COBOL编译,一个用于链接编辑器,还有一个用于程序获取。我在PROC语句所在的同一文件中也有COBOL代码。
-This发生在运行z/OS的IBM大型机上。
测试,可以看到我的“can”变量被设置为默认的“-Above,APOST”。默认情况下,只需将字段留空即可使变量为null (例如CPARM=,)。
-You可能已经注意到,在CPARM定义之后,有一个逗号;这是因为后面有更多的变量。请记住,您为任何给定的PROC创建的最后一个符号参数后面应该没有任何内容(即.没有逗号)。当然,您可以在后面放置一个注释行(//*)、另一个PROC或实际代码,但最后一个符号参数在同一行上应该没有任何内容。
https://stackoverflow.com/questions/740302
复制相似问题