我尝试这样创建和删除数据集名称中包含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=(修改、删除、删除)。有没有其他方法可以删除数据集?
发布于 2011-08-10 01:44:50
正如您已经发现的那样,JCL不支持内联数据中的符号替换。
以下内容应该适用于您:
//DEL01 EXEC PGM=IEFBR14
//DELDD DD DSN=DATASET.TEMP.&DATE,
// DISP=(MOD,DELETE,DELETE),
// SPACE=(TRK,0) 添加空间参数。如果数据集不存在,则会因为MOD部署而创建它。则它将在步骤完成时被删除。Net的结果是,在此步骤之后,命名的数据集将不存在。
我看到的唯一真正的问题是:
// SET DATE=20110809您提供的日期长度为8个字符(最大限定符长度),但不是以字母或国家字符开头(以数字开头)。这将导致无效的数据集名称。如果只向数据集日期限定符添加一个alpha前缀,它将变得太长。解决此问题的常用方法是使用儒略日期,如: 2011221。在儒略日期前加上alpah或国家字符,如: D2011221。因此,您的SET指令将如下所示:
// SET DATE=D2011221一切都会好起来的。
发布于 2013-10-11 21:30:14
从z/OS2.1(发布于2013年9月30日)开始,可以通过将SYMBOLS关键字添加到DD语句来在JES2流数据中使用符号。可能的值包括:
SYMBOLS=JCLONLY:替换流中的JCL符号和JES符号data.SYMBOLS=EXECSYS:替换作业期间在系统上定义的JCL符号、JES符号和系统符号execution.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'
/*有关更多信息,包括配置符号替换日志的位置的语法,请参阅:
https://stackoverflow.com/questions/6998907
复制相似问题