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

2.15 JCL过程的调用

调用过程时既可以原样使用它,也可以增加附加的DD语句、覆盖原过程的EXEC和/或DD语句,或覆盖原有的EXEC和/或DD语句,或使用JCL符号变量去设定过程执行的变量值。所有在过程调用中对过程语句的增加或修改都是临时的,只对当前作业步有效,不会修改过程原来的代码。调用过程需用下列格式之一编写EXEC语句。

        //name EXEC PROC=procname或
        //name EXEC procname

系统按下列顺序寻找所要执行的过程。

● 如果调用流内过程,系统从作业输入流开始查找(记住流内过程放置在EXEC语句调用它之前,并以//namePROC语句开始和//PEND语句结束)。

● 如果调用存储在专用过程库中的编目过程,系统从在作业的JCLLIB语句上设定的库中开始查找(JCLLIB语句出现在EXEC语句之前)。

● 如果调用存储在系统过程库中的编目过程,从“SYS1.PROCLIB”或其他定义的系统过程库中寻找它。

● 当在专用过程库中工作时,JCLLIB用来指定查找的专用数据集名,除指定过程调用中要查询的数据集名之外,JCLLIB语句同时也能决定查询的顺序。系统查询专用过程库是按照它们在JCLLIB语句中输入的顺序寻找的,优先于任何默认系统过程库的查找。

● JCLLIB语句的语法是://[name] JCLLIB ORDER=(library[,library]...)。

● 如果使用专用过程库,JCLLIB语句必须出现在作业中JOB语句之后的第1个EXEC语句之前,每一个作业只允许使用一个JCLLIB语句。

覆盖参数修改只影响该参数,系统还可以继续使用原始JCL语句上的所有其他参数。例如,如果覆盖包含UNIT和VOL=SER参数的DD语句上的数据集名,系统仍然可以使用UNIT和VOL=SER参数。过程中无效的参数不能通过覆盖而得以修正。在处理覆盖作业步之前,系统搜索原始过程语句的错误,并发送错误信息。编目或流内过程参数可以通过以下途径修改。

● 修改EXEC语句参数。

✧ 关键字参数可以覆盖一个参数或加入到过程中的所有EXEC语句中,例如://STEPn EXEC PROC=INPROC,ACCT=1688,在这个例子中,ACCT参数适用于过程中的所有作业步。

✧ 如果关键字参数覆盖某个参数,或只加入到过程中的一个EXEC语句中,过程步名跟在关键字之后,例如://STEPn EXEC PROC=INPROC,ACCT.STEP1=1688,此例中, 过程步名增加到ACCT参数中,ACCT=1688只适用于步骤STEP1。

● 修改OUTPUT JCL和DD语句:

当明确指定适用的作业步时,覆盖或增加的语句可以按任何顺序出现。如果先前没有命名,修改只适用于第1步,例如:

        //STEPn       EXEC INPROC
        //STEP1.IN    DD DSN=TESTB.DATA

这类修改只是临时的,只适用于当前执行的作业。