IBM主机技术一本通
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.14 JCL过程的定义

过程是经常被使用的JCL语句的集合,它们被归集在一起并赋予名字以备调用。大多数JCL过程执行可被多种作业调用的通用功能。过程通常存储在系统数据集里,所以叫做过程库,缩写为Proclibs。因为存储在系统过程库中,适用的范围很广阔。可是过程也可以存储在专用过程库中,或在一个作业里,限制它们的适用范围,只对特许用户或单个作业有效。

过程分为两种类型:编目过程(cataloged procedures)和流内过程(instream procedures.)。两种过程都可以通过下列JCL语句之一调用。

        //[stepname] EXEC PROC=procedure-nam
        //[stepname] EXEC procedure-name

● 编目过程:

✧ 过程作为一个PDS或PDSE的成员存储起来叫做编目过程,包含此过程的数据集可以是专用的或私有的,也可以是系统的。系统过程库是SYS1.PROCLIB。

✧ 编目过程名是它的成员名,当调用编目过程时,调用作业步接收编目过程的复制版本,因此,它可以被多个作业同时使用。

✧ PROC和PEND语句表示过程的开始和结束,对编目过程是可选的。如果编写了PROC,它必须放在过程的首位。一个编目过程可以由SET、EXEC、DD、OUTPUT、JCL、INCLUDE、IF/THEN/ELSE/ENDIF、CNTL、ENDCNTL和JCL注解语句构成,JES2和JES3控制语句不能作为编目过程的一部分。

● 流内过程:

✧ 流内过程,它的JCL语句放置在作业执行它们的地方。流内过程的开始必须由PROC语句来表示,PEND语句表示结束。流内过程必须在使用之前定义好。

✧ 流内过程由SET、EXEC、DD、OUTPUT、JCL、INCLUDE、IF/THEN/ELSE/ENDIF、CNTL、ENDCNTL和JCL注解语句组成,JES2和JES3控制语句不能作为流内过程的一部分。

✧ 流内过程不能嵌套于另一个过程里,只能被本JOB调用。

这两种过程都可以调用其他过程,嵌套层最多15 层。使用过程有许多益处,程序员使用一个过程可以把JCL语句集归类到一个名字下,通过调用过程名来运行它们。这就避免编写那些冗余的代码,从而使作业变得更加友好,过程的使用彻底解决了作业里大量JCL语句的问题。

因为编目过程存储在专用或系统库中,它们可以供所有用户使用,这样程序员可以调用多种过程,使作业变得更加有效。使用编目过程还可以改善过程的维护,因为它们的存储和维护都是在中心完成的。过程放置到库里之前,经常作为流内过程测试,这样可以简化过程的测试。

流内过程是作业执行的一部分,语句PROC表示流内过程的开始,而PEND表示流内过程的结束,我们使用类似于下面的方式把流内过程的JCL语句与其他JCL语句区分出来,流内过程通常是由PROC和PEND语句包含起来的若干个作业步的集合,如下例所示,PROC将特定的作业步模块化了。

        //ProcName  PROC
        //  … STEP1
        // … STEP2
        //  …
        //  … STEPn
        //         PEND

请注意,编目过程不需要编写//name PROC和//PEND语句,因为它们存储在自己的成员中;可是如果在编目过程中编写了//name PROC语句,它们必须是过程的第1个语句。在PROC中使用以DD * 方式说明的内部流数据。