我对如何在JCL中为我在COBOL类中执行的赋值创建符号变量感到困惑。
例如,我应该“为PARM选项指定一个符号参数,并指定TEST和APOST作为默认值。”
如何将“PARM”选项指定为符号参数?
编辑:原谅疏忽;似乎我忘了提到我正在运行的操作系统。我正在z / OS中编写这个JCL文件。提前致谢!
编辑:
@avisser:
所以,你所说的是我可以称之为“& PARM ='TEST,APOST'”,如果我想用另一个JCL语句运行此proc时更改该参数,则列出的parms可以从调用JCL更改吗?
编辑:
@avisser:
是的,对不起,我真的需要努力更具体......在我的COBOL JCL中,我调用COBOL编译器(IGYCRCTL),链接编辑器(HEWL)和程序获取(EXEC PGM =)。
编辑:
也许有助于了解我的输出是什么。到目前为止,我真的非常感谢那些试图提供帮助的人。
输出:
------ JES2 JOB STATISTICS ------
37 CARDS READ
61 SYSOUT PRINT RECORDS
0 SYSOUT PUNCH RECORDS
3 SYSOUT SPOOL KBYTES
0.00 MINUTES EXECUTION TIME
!!结束JES SPOOL文件!!
1 // KC03CEFA JOB,'MATT R',MSGCLASS = H,TYPRUN = SCAN JOB07731
// *
2 // STEP01 EXEC PGM = IGYCRCTL,& REGION = 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 //产品DD DSN = KC02322.CSCI465.SP09(DATA1),DISP = SHR
26 // SYSIN DD *
!结束JES SPOOL文件!!
STMT NO。信息
2 IEFC630I未知的关键字和区域
2 IEFC630I未知身份的关键字和PARM
4 IEFC630I未知身份的关键词和DSN
4 IEFC630I未知身份的关键词和DISP
13 IEFC630I未经授权的关键字和COND
13 IEFC630I未经授权的关键字和参考
13 IEFC630I未知的关键词和PARM
15 IEFC630I未经授权的关键字和DSN
15 IEFC630I未经授权的关键词和DISP
20 IEFC630I未经授权的关键字和PARM
22 IEFC605I未知的操作领域
23 IEFC605I未知的操作领域
!结束JES SPOOL FILE !!
答案 0 :(得分:6)
符号参数是以&符号开头的名称。在JCL语句中使用时,在运行时它们将转换为提供的值。创建它们的一种方法(在z / OS上)使用
// SET name = value
声明。 如果您使用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
答案 1 :(得分:4)
好的,我做了一些挖掘,并且,根据avisser给我的指导,我能够弄清楚我必须做什么。因此,对于可能有这个问题(或类似问题)的任何人的未来参考,这是我想出的:
步骤1:使用您将使用的变量创建“PROC”。
离。我想在COBOL编译器中为“PARM”使用变量,其默认值为“TEST”和“APOST”,所以我写了类似的东西:
//PROC1 PROC CPARM='TEST,APOST',
步骤2:在实际的JCL步骤中使用这些新定义的符号参数。 “&”字符显示随后的任何内容都是符号参数。
离。我在COBOL编译步骤中使用了前面提到的“CPARM”:
//COB EXEC PGM=IGYCRCTL,REGION=&CREGION,
// PARM='&CPARM'
步骤3:在实际步骤后用“PEND”语句结束“PROC”。
离。在我列出了所有变量之后,我列出了编译的所有步骤(编译器名称,可以找到编译器的位置,并且在PEND语句之前可以看到SYSUT1-SYSUT7语句),请放置您的PEND关键字:
//SYSUT7 DD UNIT=DISK,SPACE=(CYL,(1,1))
// PEND
步骤4:将任何其他JCL步骤和/或代码添加到源文件中,然后关闭!
注意:
- 您可以在一个JCL文件中拥有多个PROC语句。我有三个:一个用于COBOL编译,一个用于链接编辑器,一个用于程序提取。我的PROC语句所在的文件中也有COBOL代码。
- 这发生在运行z / OS的IBM大型机上。
- 之后,可以看出我的“CPARM”变量被设置为默认值“TEST,APOST”。只需将该字段留空即可将变量设为null(例如CPARM =,)。
- 您可能已经注意到在CPARM定义之后,有一个逗号;这是因为我之后有更多的变量。请记住,您为任何给定PROC创建的最后一个符号参数应该没有任何内容(即没有逗号)。当然,您可以在之后放置注释行(// *),另一个PROC或实际代码,但最后一个符号参数应该在同一行上没有任何内容。