您的位置:首页 > 其它

JCL语言基础教程

2009-05-06 16:59 211 查看
作业控制语言JCL(Job Control Language)
必须包含三个JCL基本语句:
(1)作业语句(JOB):标识一个作业的开始,提供必要的运行参数。
(2)执行语句(EXEC):标识一个作业步的开始,定义本作业步所要执行的程序或过程。
(3)数据定义语句(DD):用于描述应用程序所需要的数据文件。
系统规定这三种语句行必须以“//”开头。下面是一个多步作业的例子:

//JOB1 JOB …

//STEP1 EXEC …
//DD1 DD … 作业步1
//STEP2 EXEC …
//INDD1 DD … 作业步2
//INDD2 DD …
//
六种附加语句:
1)/* 语句:表示六内数据结束或调用JES控制语句;
2)//*语句:注释语句,由第4到第80列写出注释内容;
3)//语句:空语句,用以标记一个作业的结束;
4)PROC语句:流内过程(IN-STREAM PROCEDURE)或编目过程(CATALOGED PROCEDURE)的起始标记。
5)PEND语句:标志一个流内过程的结束。
6)Command语句:操作员用这个语句在输入流中写入操作命令。
JCL实例:
//BACKUP JOB ,’EXAMPLE JOB’
//************************
//* IT IS A EXAMPLE! *
//************************
//STEP1 EXEC PGM=IEBGENER
//STEPLIB DD DSN=SYS1.LINKLIB,DISP=SHR
//SYSIN DD DUMMY
//SYSPRINT DD SYSOUT=A
//SYSU1 DD DSN=PR.MASTER,DISP=OLD
//SYSU2 DD DSN=PR.MAILY.BACKUP,DISP=(NEW,CATLG),UNIT=TAPE,
// DCB=(RECFM=FB,LRECL=200,BLKSIZE=1000)
//
JCL的语法规则:
一、JCL字符集
(1)字母(共26个)
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
(2) 数字(共10个)
0 1 2 3 4 5 6 7 8 9
(3) 特殊字符(共10个)
, . / ‘ ( ) * & + - =
(4)通配符(共6个)
@ $ # (也可分别用X’7C’ X’5B’ 和 X’7B’表示)
(5) EBCDIC 可打印字符集
一般语句格式规范 :
分别是标识符区、名字区、操作符区、参数区和说明区.
名字区后必须跟一个或多个空格,可以选择名字表达出这个JCL语句的作用。下面给出几个正确与错误的名字区的例子:
正确的 错误的
//Z //9Z
//BACKUP#1 //TAPEBACKUP
//#99 //TEST*9
//$EXAM //EXAM(0)

操作符区位于名字区之后,规定了语句的类型:JOB、EXEC、DD、PROC、PEND,或操作员命令。
名字区后必须跟一个或多个空格。例如:
//EXAMPLE JOB
//STEP1 EXEC
//INDD1 DD

参数区在操作符区之后,其中包括被逗号分隔的参数,参数由事先规定好的关键字组成,对于这些参数其数值必须是可被代换的变值。参数区没有固定的长度及列的要求。例如:
//EXAMPLE JOB 2000,CLASS=A
//STEP1 EXEC PGM=IEYFORT
//PRINT DD SYSOUT=A
说明区位于参数区后,用于对相应语句进行注释说明,它可以是任何需要的说明信息,注释区后必须跟一空格。需要注意的是,仅当参数出现时才能书写说明信息,不然容易与参数混淆。
//EXAMPLE JOB ,CLASS=A IT IS A COMMENT

JCL只允许在参数区和说明区有续行,当需要续行时,在当前行的第71列前必须将某个参数或某个子参数以及参数后的逗号写完整,且下一行第1、2列为“//”,第3列为空格,续行的内容只能从4~16列开始,如从16列后开始,将被认为是注释语句。
//DATA DD DSN=SYS1。FORTLIB,
// DISP=OLD

参数规则
在JCL中,参数区内的参数的类型分为两类:
(1)位置参数(positional):与其他参数保持相对位置的参数;
(2)关键字参数(keyword):由一个关键字和等号后面的可变数据组成。
如果在一个语句内既有位置参数又有关键字参数时,所有的关键字参数必须位于位置参数之后。例:
//EXAMPLE JOB 2000, CLASS=A
位置参数 关键字参数
JCL语法实例
作业语句 //EXPJOB JOB ,’USERNAME’,MSGLEVEL=(1,1), EXAMPLE
作业语句续行 // MSGCLASS=Q,CLASS=A
//**********************
注释语句 //* IT IS A EXAMPLE *
//**********************
执行语句 //STEP1 EXEC PGM=IEFBR14
DD语句 //DD1 DD DSN=MJSN.TEAM01.ONE,DISP=(,CATLG),
DD语句续行 // SPACE=(TRK,(5,2)), UNIT=SYSDA
DD语句 // DD1 DD DSN=MJSN.TEAM01.TWO,DISP=(,KEEP),
DD语句续行 // SPACE=(TRK,(1,1)), UNIT=SYSDA

JOB语句
JOB语句标志一个作业的开始、分配作业名并设置相关的位置参数及关键字参数,每个作业的第一个语句必须是JOB语句。
JOB语句的格式如下:
//作业名 JOB 位置参数[,关键字参数][,关键字参数]。。。[注释说明]
JOB语句中的关键字参数有如下几个:
1.ADDRSPC 作业所需之存贮类型
2. BYTES 打印作业的系统输出数据集的最大千字节数
3. CLASS 参数规定了作业的类别 用字母A~Z及数字0~9表示 4.MSGCLASS 用于为作业日志(job log)设置输出类别。
//EXMP1 JOB ,GEORGE,MSGCLASS=F
5.MSGLEVEL
用于控制JCL作业输出清单的内容
6.NOTIFY
用于请求系统在后台作业处理完毕时给指定用户发送信息。
7.PRTY
用于为相应的输入队列中的作业分配优先级。
8.REGION
用于指定作业所需的实存或虚存空间的大小,系统将在该作业中的每一作业步使用该值。
9.TIME
用于指定作业占用处理器的最长时间并可通过一些信息得知该作业占用处理器的时间。
10.TYPRUN
用于请求特殊的作业处理。
COND、GROUP、PASSWORD、PERFORM、RD、RESTART、SECLABEL、USER…
EXEC语句
EXEC语句标明作业或过程中的每一作业步的开始,并告知系统如何执行该作业步。
EXEC语句格式如下:
//[作业步名] EXEC 位置参数[,关键字参数]…[符号参数=值]… [注释]
EXEC语句中的位置参数有两个:PGM和PROC。
每条EXEC语句必须有且仅有一个位置参数或过程名.
格式:
PGM={program-name}
{*.stepname.ddname}
{*.stepname.procstepname.ddname}
//JOBC JOB ,JOHN,MSGCLASS=H
//STEP2 EXEC PGM=UPDT
//DDA DD DSNAME=SYS1.LINKLIB(P40),DISP=OLD
//STEP3 EXEC PGM=*.STEP2.DDA
在上例中,名为STEP3的EXEC语句采用程序间接调用方式,所调用的程序名由作业步STEP2中的名为DDA的DD语句决定,在该DD语句中定义了系统库SYS1.LINKLIB,程序P40是该库的一个成员。“P40”即STEP3中要调用执行的程序名.
PROC 指明作业步所要运行的过程名。
格式:
{PROC=procedure-name}
{procedure-name }
procedure-name:需要调用的过程名,过程名由1~8个字母或通配符开头的字符数字构成。所调用的过程名可以是:
·编目过程的成员名或别名。
·由PROC语句定义的流内过程的过程名,该流内过程必须在本作业内且本作业步前定义。
在设定该参数时,可直接写出过程名。
例:
//SP EXEC PROC=PAYWRKS
//BK EXEC OPERATE
EXEC语句的关键字参数
关键字参数.过程步名=值
1.ACCT 作业步所需的一个或多个记账信息子参数
ACCT[.过程步名]=(记账信息)
例: //STP3 EXEC PROC=LOOKUP,ACCT=(‘/83468’)
2.ADDRSPC作业步所需之存贮类型,它有两个子参数:VIRT及REAL
例:
//CAC1 EXEC PGM=A,ADDRSPC=VIRT
//CAC2 EXEC PROC=B,ADDRSPC=REAL,REGION=100K
REGION
作业步所需的实存或虚存空间的大小,系统仅在本作业步中使用该值。
REGION[.过程步名]={valueK}
={valueM}
例:
//MKBOYLE EXEC PROC=A,REGION=100K,ADDRSPC=REAL
//STEP6 EXEC PGM=CONT,REGION=250K
TIME
用于指定作业步占用处理器的最长时间,并可通过作业输出清单得知该作业步占用处理器的时间
TIME[.过程步名]={([minutes][,seconds])}
={1440 }
={NOLIMIT }
={MAXIMUM }
值得注意的是:在JOB语句中不可设置TIME=0,而在EXEC语句中则可以设置TIME=0,当TIME=0时表示本作业步的执行时间由前面作业步的剩余执行时间决定。
COND
用于对先前作业步执行的返回码(return code)进行测试,以决定是否执行本作业步。
格式:
(1)COND[.过程步名]=(code,operator)
(2)COND[.过程步名]=((code,operator[,作业步名][,过程步名])
[,(code,operator[,作业步名][,过程步名])]…[,EVEN])
[,ONLY]
(3)COND=EVEN
COND=ONLY
//STEP6 EXEC PGM=DISKUTIL,COND=(4,GT,STEP3)
在本例中如果STEP3的返回码小于4,系统将不执行STEP6。由于没有设置EVEN或ONLY,如果先前的作业步异常终止,系统将不会执行本作业步。

//TEST2 EXEC PGM=DUMPINT,COND=(16,GE),(90,LE,STEP1),ONLY)
由于设置了ONLY子参数,系统只在以下两种情况满足时执行本作业步:
(1)先前作业步异常终止;
(2)返回值的测试条件都不满足。
那么对于本例来说,系统将会在以下三种情况都满足的情况下执行本作业步:
·一个先前作业步异常终止。
·所有先前作业步的返回码大于等于17。
·STEP1的返回码小于等于89。
PARM
用于向本作业步执行的程序传递变量信息。该程序必须有相应的指令接收这些信息,并使用它们。
格式:
PARM[.过程步名]= 子参数
PARM[.过程步名]=( 子参数, 子参数)
PARM[.过程步名]=(‘子参数’, 子参数)
PARM[.过程步名]=’子参数, 子参数’
括所有的逗号、撇号以及括号在内,所有子参数的总长度不得超过100个字符。当某子参数中含有特殊字符或空格时,可以将该子参数用撇号括起来,在其它子参数一起用括号括起来,或将所有在参数用撇号括起来。
子参数:包含传递给程序的变量信息。
例1.
//RUN3 EXEC PGM=APG22,PARM=’P1,123,P2=5’
在本例中,系统将参数P1、123及P2=5传递给程序APG22。
例2.
// STP6 EXEC PROC=ASFCLG,PARM.LKED=(MAP,LET)
在本例中系统将MAP、LET传递到过程ASFCLG中名为LKED的过程步。
DD语句
数据定义语句(DD语句)用于定义一个数据集以及该数据集所需的输入输出资源。
格式:
//[dd名 ] DD [位置参数][,关键字参数]… [注释]
[过程步名.dd名]
//[dd名 ] DD
[过程步名.dd名]
DD语句的参数也分为位置参数及关键字参数,这些参数都是可选的。每个DD语句只能有一个位置参数,但根据需要可以有个关键字参数。位置参数有“*”、“DATA”和“DUMMY”。
参数“*”
参数“*”用于开始一个流内数据集。数据记录跟在“DD ”语句之后,其第一、二列不能是“//”或“/*”;该记录可以是任何编码,如EDCBIC。下列符号表明流内数据记录的结束:
·输入流中的“/*”。
·表示另一个JCL语句开始的“//”。
当数据记录中需以“//”开始时,就必须使用DATA参数来代替“*”参数。
DATA
用作一个流内数据集的开始,该流内数据集里含有以“//”开头的语句。数据记录紧跟在“DD DATA”语句之后;该数据记录可以是BCD或EDCBIC编码。数据记录将以“/*”作为结束。
格式:
//dd名 DD DATA[,参数]… [注释]
DUMMY
DUMMY参数用于标明:
(1)没有设备或外存空间分配给该数据集。
(2) 对该数据集不进行状态处理。
(3) 对BASM或QSAM来说,不对该数据集作输入输出操作。
用户使用DUMMY参数对程序进行测试。当测试完成时,如果用户希望恢复对数据集的输入输出操作时,只需将DD DUMMY参数替换成完整的数据集定义DD语句。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: