我正在尝试以这种方式在数据集名称中创建和删除带有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)
Run Code Online (Sandbox Code Playgroud)
问题是我不能在一个instream(SYSIN DD*)中使用JCL符号.我不能确定数据集是否已经存在,所以我不能只使用DISP =(MOD,DELETE,DELETE).有没有其他方法可以删除数据集?
您发现JCL不支持内联数据中的符号替换...
以下内容对您有用:
//DEL01 EXEC PGM=IEFBR14
//DELDD DD DSN=DATASET.TEMP.&DATE,
// DISP=(MOD,DELETE,DELETE),
// SPACE=(TRK,0)
Run Code Online (Sandbox Code Playgroud)
添加SPACE参数.如果数据集不存在,则会因为MOD处置而创建它.然后在步骤完成时删除它.最终结果是,在此步骤之后,命名数据集将不存在.
我看到的唯一真正的问题是:
// SET DATE=20110809
Run Code Online (Sandbox Code Playgroud)
您给出的日期长度为8个字符(最大限定符长度),但不以字母或国家字符开头(以数字开头).这将导致无效的数据集名称.如果您只是为其添加alpha前缀,则数据集DATE qualifer将变得太长.解决此问题的常见方法是使用Julian日期,如:2011221.使用alpah或国家字符前缀Julian日期,如:D2011221.所以你的SET指令会变成:
// SET DATE=D2011221
Run Code Online (Sandbox Code Playgroud)
一切都应该成功.
从z/OS 1.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'
/*
Run Code Online (Sandbox Code Playgroud)
有关更多信息(包括配置符号替换日志的位置的语法),请参阅:
| 归档时间: |
|
| 查看次数: |
20929 次 |
| 最近记录: |