【问题标题】:Symbolic JCL Confusion符号 JCL 混淆
【发布时间】:2009-04-11 15:28:18
【问题描述】:

对于如何在 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,&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 执行 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),
// 空间=(1024,(50,20,1)),UNIT=磁盘,
// DISP=(NEW,CATLG,DELETE)
17 //SYSPRINT DD SYSOUT=*
18 //打印机 DD SYSOUT=*
19 //SYSUT1 DD UNIT=DISK,SPACE=(TRK,(10,10))
//*
//*
20 //STEP01 执行 PGM=PGM6,&PARM=TERMTHDACT(DUMP)
21 //STEPLIB DD DSN=&&TEMPLIB,DISP=SHR
22 //CEEDUMP
23 //系统转储
24 //打印机 DD SYSOUT=*
25 //产品DD DSN=KC02322.CSCI465.SP09(DATA1),DISP=SHR
26 //SYSIN DD *
!! JES 假脱机文件结束! STMT 编号信息 2 IEFC630I 无法识别的关键字&地区 2 IEFC630I 无法识别的关键字&PARM 4 IEFC630I 无法识别的关键字&DSN 4 IEFC630I 无法识别的关键字&DISP 13 IEFC630I 无法识别的关键字&条件 13 IEFC630I 无法识别的关键字&区域 13 IEFC630I 无法识别的关键字&PARM 15 IEFC630I 无法识别的关键字&DSN 15 IEFC630I 无法识别的关键字&DISP 20 IEFC630I 无法识别的关键字&PARM 22 IEFC605I 不明操作领域 23 IEFC605I 不明操作领域 !! JES 假脱机文件结束!!

【问题讨论】:

  • JCL == 作业控制语言 - 这是一个通用术语。您需要指定您要询问的操作系统

标签: jcl


【解决方案1】:

符号参数是前面带有 & 符号的名称。在 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

【讨论】:

  • 哇。 +1 只是为了了解 JCL 是什么。
  • 我最终弄明白了(这和你给我看的有点不同),但你的建议很有帮助。非常感谢。
  • 如前所述,SET 只是定义参数值的一种方式。在过程调用中提供它们是另一回事,但我认为 SET 会更容易开始。
【解决方案2】:

好的,我进行了一些挖掘,并且在 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 或实际代码,但最后一个符号参数在同一行中不应有任何内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-16
    • 1970-01-01
    • 2011-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多