大型机学习之具体技术之-JCL练习(五)-过程的定义与使用

《大型机学习之具体技术之-JCL练习五-过程的定义与使用》

 

和其它高级语言一样,作业控制语言中也允许定义过程。过程是一段预先编写好的JCL

语句的集合,它可以被反复调用。作业控制语言中定义了两种过程,分别是编目过程

 cataloged procedure)和流内过程(in-stream procedure)。

 

编目过程与流内过程 

    在指定的过程库中编目的过程称为编目过程。该过程库可以是分区数据集或扩展分区数据集,通常系统过程被编目在系统过程库中,用户过程被编目在用户库中。由于调用编目过程时,系统提供的是该过程的拷贝,因此一个编目过程可以同时被几个作业调用。

    流内过程是放置在作业输入流中的过程。在一个作业中最多可以有 15 个流内过程,但不能嵌套使用,也不能被其他作业调用。流内过程与编目过程的区别是流内过程随着一个作业放在输入流中,它紧跟在 JOB  语句后面而不是作为分区数据集的成员。在实际应用时,流内过程只用于测试阶段,一旦流内过程调试成功,即可对其进行编目,使其能够成为编目过程。

 

l     过程的编写 

一个过程可由几个作业步组成。在过程中可以包含除下列语句外的所有JCL 语句:

调用过程的 EXEC 语句(一个过程不能调用另一个过程)   

JOB 语句、/*语句或//语句   

JOBLIB DD语句或 JOBCAT DD语句   

任何的 JES控制语句   

DD *语句或 DD DATA 语句 

 

流内过程的开始和结束分别用 PROC 语句和 PEND 语句表示,对于编目过程,不能有

PEND 语句,而如果没有分配给符号参数默认值,PROC 语句是可选的。过程的结构如下:

//过程名   PROC  [符号参数]

//过程步 1  EXEC

//dd 1   DD

        

        

        

//过程步 2  EXEC

//dd 2   DD

        

        

        

//        PEND      (仅在流内过程中使用)

 

过程结构中的过程名、过程步名及 dd 名的书写规则与 JCL 中其它语句名的书写规则一样。  符号参数的功能类似于其它编程语言子程序中的形式参数。

例:流内过程

    //MYJOB  JOB   2216,82,TEST RUN,CLASS=A

    //RUN  PROC

    //GO   EXEC  PGM=ONE

    //SYSOUT  DD  SYSOUT=A       

    //       PEND

    //STEP1  EXEC  RUN

本例中RUN是一个流内过程,作业中名为 STEP1 的执行语句调用这个流内过程。该

流内过程在去掉 PEND 语句后也可以作为标准的过程放在用户库中,作为编目过程。

 

l     过程的调用

过程的调用有如下两种方式:

    //作业步名  EXEC  PROC=过程名  [符号参数]

  //作业步名  EXEC    过程名            [符号参数]

当调用一个过程时,系统会以输入流、用户库、系统库的顺序来检索所要调用的过程

如果所调用的过程是流内过程,则必须把流内过程放在调用它的EXEC 语句之前。

如果调用的编目过程被编目在用户库中,系统从JCLLIB 语句确定的用户库中进行检索。

因此,若调用的过程是用户库中的过程时,要用JCLLIB 语句来指明过程所在的用户库。如

果调用的编目过程被编目在系统库中,系统从 JES2  中的PROCLIB 参数指定的系统库进行

检索。

 

l     过程的修改

由于不同用户的要求不同,所以当某一个作业调用标准过程时,系统应允许用户对过程进行修改,以满足自己的需要。过程修改的方式有如下三种:

1)置换过程中的符号参数;

2 )对过程中的EXEC DD 语句参数进行覆盖和增加;

3)增加新的DD 语句。

 

 1 符号参数

 符号参数由符号“&”和参数名组成,参数名可以是以字母或通配符开头的1~8 位字母数字或通配符,关键字参数和关键字子参数不能作为符号参数的参数名。符号参数为修改过程提供了可选用的方法。

 当过程中含有符号参数时,每一个符号参数必须指定一个值或赋空值,该值被称为符号参数的初值。

 下面是一个使用符号参数的例子:

     1//RUN   PROC     PROGRAM=ONE,UNIT=SYSDA

          //GO    EXEC      PGM=&PROGRAM

          //A     DD       UNIT=&UNIT,SPACE=(TRK,20)

 在本例中符号参数PROGRAMUNIT 都被赋了初值。当一个作业调用该过程时,这些

符号参数的初值可以被调用该过程的 EXEC 语句中的符号参数值所取代,从而达到修改过 程的目的。

下面是调用例 1 过程的例子:

     2//JOB1    JOB  

          //GO   EXEC    RUN,UNIT=TEMP

          //     PROGRAM=TWO

 

 2 EXEC 语句参数的覆盖和增加

EXEC   语句调用过程时,该语句的所有关键字参数都会影响过程的执行,它将覆盖过程中定义的参数,对于过程中没有定义的参数,系统会把它加到过程中去。用 EXEC              语句修改过程的方式如下:

         //stepname   EXEC     过程名,参数.过程步=

 其中“参数.过程步=值”表示准备对过程中所希望的过程步的关键字参数进行修改。

 例如有下述过程:

         //RUN    PROC

         //STEP1   EXEC    PGM=P1

 

                 ·

         ·

 

          //STEP2     EXEC     PGM=P2

                  ·

 

                  ·

 

          //STEP3    EXEC    PGM=P3,TIME=(2,30)

 若要求对 STEP2 增加COND 参数并指定条件测试为(8,GT),对STEP3 改变其时间限

制为4 秒。那么调用该过程时,EXEC 语句为:

          //GO   EXEC     RUN,

          //     COND.STEP2=(8,GT),

          //     TIME.STEP3=4

 

 3 DD 语句参数的覆盖

 对于过程中DD 语句参数的修改可以通过下列方式:

          //过程步名.DD   DD      

“过程步名.DD 名”用来确定要修改的DD 语句,其中“DD 名”指需要修改的DD

句,“过程步名”指过程重要修改的 DD 语句所在的过程步的名字。下面是对过程中 DD 句进行修改的例子:

     例://RUN     PROC

                ···

          //S1   EXEC …

                ···

          //SYSUT2     DD    SYSOUT=*

                ···

          //        PEND

                ···

          //TEST2    EXEC    RUN,…

                ···

          //S1.SYSUT2     DD    SYSOUT=S

 4 增加新的DD 语句

 对于调用的过程,可能不包含用户需要的 DD           语句,这是可通过下列方法来增加新的DD 语句:

         //过程步名.需增加的DD 语句

 其中过程步名是确定新加的DD 语句在过程中的位置。

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值