5

我正在尝试以这种方式创建和删除数据集名称中带有 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)

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

4

2 回答 2

9

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

  • 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'
/*

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

于 2013-10-11T13:30:14.340 回答
8

正如您发现的那样,JCL 不支持内联数据中的符号替换......

以下内容应该适合您:

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

添加一个空间参数。如果数据集不存在,它将因为MOD配置而被创建。然后它将在步骤完成后被删除。最终结果是,在这一步之后,命名数据集将不存在。

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

//    SET DATE=20110809

您提供的日期长度为 8 个字符(最大限定符长度),但不以字母或国家字符开头(它以数字开头)。这将导致数据集名称无效。如果您只向其添加 alpha 前缀,则数据集 DATE 限定符将变得太长。解决此问题的常用方法是使用儒略日期,如:2011221。在儒略日期前加上字母或国家字符,如:D2011221。所以你的 SET 指令会变成这样:

//    SET DATE=D2011221

一切都应该解决。

于 2011-08-09T17:44:49.587 回答