我正在尝试以这种方式在数据集名称中创建和删除带有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)。 还有其他方法可以删除数据集吗?
答案 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'
/*
有关更多信息,包括配置符号替换日志的位置的语法,请参阅: