4

我对如何在 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 JOB ,'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 //打印机 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 编号 MESSAGE 2 IEFC630I不知名KEYWORD&REGION 2 IEFC630I不知名KEYWORD&PARM 4 IEFC630I不知名KEYWORD&DSN 4 IEFC630I不知名KEYWORD&DISP 13 IEFC630I不知名KEYWORD&COND 13 IEFC630I不知名KEYWORD&REAGION 13 IEFC630I不知名KEYWORD&PARM 15 IEFC630I不知名KEYWORD&DSN 15 IEFC630I不知名KEYWORD&DISP 20 IEFC630I不知名KEYWORD &PARM 22 IEFC605I 未识别的操作区域 23 IEFC605I 未识别的操作区域!JES 假脱机文件结束!

4

2 回答 2

6

符号参数是前面带有 & 符号的名称。在 JCL 语句中使用时,它们会在运行时转换为提供的值。创建它们的一种方法(在 z/OS 上)是使用

// SET name = value

宣言。如果您使用 PARM,您应该设计您的程序,以便它可以与 PARM 一起使用。也许任务是关于如何做到这一点(提示:链接部分)。还是 JCL 是您的 COBOL 类的一部分?

TEST 和 APOST 在我看来就像编译器指令。我不知道你是否可以在你的程序中指定它们,在我的工作场所,我们只在调用编译器时提供它们。

编辑:

好吧,这对我来说有点不寻常,因为我们倾向于在单独的 JCL 流中编译和运行我们的程序。但无论如何。

采取你的第二个陈述:

2 //STEP01 EXEC PGM=IGYCRCTL,&REGION=248K,
  // &PARM='TEST,APOST'

REGION 和 PARM 是所谓的位置参数,它们是关键字,并不是真的要以符号名称的形式呈现,尽管您可以自由地这样做(这将解释“未识别的关键字”消息)。
常见用途(如果适用)是为此类参数的操作数提供符号名称。显然,您必须首先为它们定义一个值,例如:

  // SET OPTIONS='TEST,APOST'
  //STEP01 EXEC PGM=IGYCRCTL,REGION=248K,
  // PARM=&OPTIONS
于 2009-04-11T16:35:14.583 回答
4

好的,我进行了一些挖掘,并且在 avisser 给我的指导下,我能够弄清楚我必须做什么。因此,对于任何可能有这个问题(或类似问题)的人,以供将来参考,以下是我的发现:

第 1 步:使用您将使用的变量创建一个“PROC”。

前任。我想在我的 COBOL 编译器中使用具有“TEST”和“APOST”默认值的“PARM”变量,所以我写了如下内容:

//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”。默认情况下,只需将该字段留空(例如 CPARM=,),就可以使变量为空。

-您可能已经注意到,CPARM定义后,有一个逗号;这是因为我有更多的变量。请记住,您为任何给定 PROC 创建的最后一个符号参数后面应该没有任何内容(即没有逗号)。当然,您可以在之后放置注释行 (//*)、另一个 PROC 或实际代码,但最后一个符号参数在同一行上不应有任何内容。

于 2009-04-13T14:01:41.113 回答