将JCL符号传递给流内数据集

时间:2011-08-09 15:41:44

标签: mainframe jcl

我正在尝试以这种方式在数据集名称中创建和删除带有JCL符号的数据集:

//    SET DATE=20110809
//* DELETE DATASET
//DEL01 EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN    DD *
           DELETE DATASET.TEMP.&DATE                PURGE
           SET MAXCC = 0
//* CREATE DATASET
//STEP01   EXEC PGM=IEFBR14
//DELDD    DD DSN=DATASET.TEMP.&DATE,
//            DISP=(NEW,CATLG,DELETE)

问题是我不能在一个内流中使用JCL符号(SYSIN DD *)。 我不能确定数据集是否已经存在,所以我不能只使用DISP =(MOD,DELETE,DELETE)。 还有其他方法可以删除数据集吗?

2 个答案:

答案 0 :(得分:7)

JCL不支持内联数据中的符号替换,因为您已经发现......

以下内容对您有用:

//DEL01   EXEC PGM=IEFBR14          
//DELDD    DD DSN=DATASET.TEMP.&DATE, 
//         DISP=(MOD,DELETE,DELETE), 
//         SPACE=(TRK,0)             

添加 SPACE 参数。如果数据集不存在,则会因为 MOD 处置而创建数据集。然后 它将在步骤完成时删除。最终结果是,在此步骤之后,命名数据集将不存在。

我看到的唯一真正的问题是:

//    SET DATE=20110809

您给出的日期长度为8个字符(最长限定符长度),但不是以 字母或国家字符(以数字开头)。这将导致无效 数据集名称。如果您只是为其添加alpha前缀,则数据集DATE qualifer将变得太长。该 解决此问题的常见方法是使用Julian日期,如:2011221。使用其中任何一个前缀Julian日期 属于alpah或国家的角色,如:D2011221。 所以你的SET指令会变成:

//    SET DATE=D2011221

一切都应该成功。

答案 1 :(得分:6)

从z / OS 1。1(2013年9月30日发布)开始,通过在SYMBOLS语句中添加DD关键字,可以在JES2流内数据中使用符号。可能的值有:

  • SYMBOLS=JCLONLY:替换插播数据中的JCL符号和JES符号。

  • SYMBOLS=EXECSYS:替换作业执行期间在系统上定义的JCL符号,JES符号和系统符号

  • SYMBOLS=CNVTSYS:替换 JCL转换期间系统上定义的JCL符号,JES符号和系统符号。

必须已导出符号。

一个例子如下,来自[2]:

// EXPORT SYMLIST=(DSN,VOL)
// SET DSN='ABC.DATA',VOL='123456'
//STEP1 EXEC PGM=USERPGM1
//DATA     DD DSN=&DSN,DISP=SHR
//SYSIN    DD *,SYMBOLS=EXECSYS
  SYSTEM=&SYSNAME,DSNAME=&DSN,VOLUME=&VOL
  FUNCTION='&APPL_NAME'
/*

有关更多信息,包括配置符号替换日志的位置的语法,请参阅: