一、临时数据集:
对于临时DataSet的几点总结
定义一个临时的DATASET,disp第一个参数上只能选择MOD,NEW否则就会报错,
第二个和第三个参数理论上可以任意搭配,但是一般书上会介绍PASS来保留该变量,但实际上除了DELETE意外的参数都可以来保留该变量
Step1 exec ….
DD1 DD DSN=&&TEMPA,DISP=(NEW,KEEP)
DD2 DD DSN=&&TEMPB,DISP=(MOD,PASS)
DD3 DD DSN=&&TEMPC,DISP=(,CATLG)
DD4 DD DSN=&&TEMPC,DISP=(,UNCATLG)
注:很多情况下系统会听过一些默认值,但这些默认值根据环境也有所不同,特别是SMS相关的内容,上述中也用到了默认值。Ds不存在时DISP第一个参数的默认值是‘NEW’。
通过2种方式引用
DSN=&TEMPA
DSN=*.STEP1.DD1
不论上面那种创建方式系统通过查看JCLSYSMS会发现系统做了下面几乎一样的事情:
1.创建一个临时的DATASET,如:
2.执行完结束的时候,通过下面的JCLSYSMS记录可以看到该临时的DATASET已经被删除:https://www.wendangku.net/doc/b1700926.html,TEST.TEMP.H01 DELETED
也就是说如果作业步(STEP)中没有指明删除该临时变量,上述方法定义的临时DATASET会一直保留到JOB结束时删除。
{DISP=status }
{DISP=([status][,normal-termination-disp][,abnormal-termination-disp])}
DISP= ( [NE W] [,DE LETE ] [,DE LETE ] )
[OLD] [,KEEP ] [,KEEP ]
[SHR] [,P ASS ] [,CATLG ]
[MOD] [,CATLG ] [,UNCATLG]
[, ] [,UNCATLG]
[, ]
_ You can omit the parentheses if you code only the status subparameter.
_ If you omit the status subparameter but code subparameters for normal or abnormal termination
disposition, you must code a comma to indicate the absence of NE W. For example,
DISP=(,KEEP) or DISP=(,CATLG,DE LETE).
_ If you omit the second subparameter but code the third, you must code a comma to indicate the
absence of the second subparameter. For example, DISP=(OLD,,DE LE TE) or DISP=(,,KEEP).
KEEP
Indicates that the data set is to be kept on the volume if this step terminates
normally.
Without SMS, only KEEP is valid for VSAM data sets. VSAM data sets should
not be passed, cataloged, uncataloged, or deleted.
With SMS, all dispositions are valid for VSAM data sets; however, UNCATLG is
ignored.
For new SMS-managed data sets, KEEP implies CATLG.
观察错误并且完成下面临时数据集的练习:
//IBMUSER4 JOB ACCT#,IBMUSER,NOTIFY=IBMUSER,MSGLEVEL=(1,1) //BUILD EX EC PGM=IEBGENER
//SYSPRINT DD SYSOUT=*
//SYSUT1 DD *
JONES FRED 53AF 87 5701 NINE MILE ROAD ANDERSONDON 78AF 34 320 WESTHERIMAR, #219
//SYSUT2 DD DSN=&&TEMP1,DISP=(,PASS),
// SPACE=(TRK,(1,1)),
// DCB=(RECFM=FB,LRECL=80),UNIT=SYSDA
//SYSIN DD DUMMY
//BUILD EX EC PGM=IEBGENER
//SYSPRINT DD SYSOUT=*
//SYSUT1 DD DSN=&&TEMP1
//SYSUT2 DD DSN=IBMUSER.TEST.IEBGEN1.OUT,DISP=(,CATLG,DELETE), // SPACE=(TRK,(1,1)),
// DCB=(RECFM=FB,LRECL=80),UNIT=SYSDA
//SYSIN DD DUMMY