Lenor老师 jesse老师 candy老师
 
 
所在位置:首页 >> 大型机技术 >> JCL练习五
 
JCL练习五

过程的定义与使用

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

 

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

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

 

编目过程与流内过程 

 

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

 

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

 

1     过程的编写 

 

一个过程可由几个作业步组成。在过程中可以包含除下列语句外的所有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 语句后也可以作为标准的过程放在用户库中,作为编目过程。

 

 

2     过程的调用

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

检索。

 

 

3     过程的修改

 

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

 

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 语句在过程中的位置。

 

 

 

 
收藏到Google书签 收藏到QQ书签 Yahoo书签 收藏到百度搜藏 收藏到奇客diglog
主办单位:大型机官方培训部
地址: 北京市海淀区中关村南大街48号B座
Copyright2004-2008 by www.daxingji.net. All rights reserved. 京ICP备09083121号