符号JCL混乱

时间:2009-04-11 15:28:19

标签: jcl

我对如何在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 !!

2 个答案:

答案 0 :(得分:6)

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

// SET name = value

声明。 如果您使用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

答案 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或实际代码,但最后一个符号参数应该在同一行上没有任何内容。

相关问题