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

2.17 JCL符号参数

JCL符号参数(Symbolic parameter)用来在过程中定义其所使用的参数或子参数。使用符号参数的主要目的是提高过程调用的灵活性。对于那些每次调用很有可能变化的参数,最好使用符号参数来表示。符号参数通常有它的默认值。调用过程时既可以使用默认值,也可以在使用EXEC语句调用过程时赋予它别的值。

符号参数的语法规则为:

● 符号参数由&符号开始。

● 由1~7个字母数字组成(A~Z和0~9)或通配符(#、@、$)组成,开始字符必须是字母或通配符。

● 符号参数可以代表EXEC或DD语句中的参数。

下面是符号参数的例子。

        ACCT=&ACOUNT
        PGM=&PGMID
        //STEP1 EXEC PGM=&PGMID,ACCT=&ACOUNT

符号参数由一个(&)符号开始,而临时数据集则由两个(&)符号开头,这一点不要搞混了。符号参数的默认值的定义方法为:

● 默认值出现在PROC语句的参数字段中。

● 默认值的前面没有(&)符号。

● 当有多个默认值时,它们用逗号隔开。

● 多个默认值赋值的顺序可以随意。

在下面的MYPROC过程定义中,过程PROC语句为&ACOUNT赋的默认值为1688,而为&PGMID赋的默认值为PGM1。

        //MYRPOC   PROC ACOUNT=1688,PGMID=PGM1
        //PSTEP1   EXEC PGM=PROG1,
        //            ACCT=&ACOUNT
        //PSTEP2   EXEC PGM=&PGMID,ACCT=&ACOUNT
        //DD1     DD   SYSOUT=A

在下列情况下你需要为符号参数赋值。

● 过程部PROC语句中的默认值不适合你的调用。

● 过程部的PROC语句中没有指定默认值。

覆盖默认值的方法为:

● 如果覆盖默认值,在符号参数的前面不写(&)符号,紧跟在符号变量后面写等号(=)和要赋的值。

● 如果要清空默认值,在符号参数的前面不写(&)符号,紧跟在后面的只有等号(=)。

● 覆盖默认值或清空默认值的顺序是随意的。

在这个例子中,过程MYPROC在作业步PSTEP2中要使用测试程序PRG111,而不是原来的默认值。此外,因为这是一个测试,为了不影响账户的统计信息,我们需要将账户ACOUNT的值清空。这样,原来赋给ACOUNT的默认值1688和赋给PGMID的默认值PGM1就都不适用了,我们必须做修改。

        //MYRPOC   PROC ACOUNT=1688,PGMID=PGM1
        //PSTEP1   EXEC PGM=PROG1,
        //            ACCT=&ACOUNT
        //PSTEP2   EXEC PGM=&PGMID,ACCT=&ACOUNT
        //DD1     DD   SYSOUT=A

下面是满足条件的调用过程MYPROC的JCL语句。

        //JSTEP EXEC MYPROC,ACOUNT=,
        //          PGMID=PRG111,

我们所做的修改有:

● 将原来赋给&ACOUNT的值清空。

● 覆盖原来赋给&PGMID的默认值PGM1,而用PRG111代替。

在调用过程的EXEC语句中,清空或覆盖符号变量值的语句可以按照任何顺序出现。JCL符号变量允许用户通过变量的使用修改作业中的JCL语句,它只对当前作业有效。当在作业里编写JCL符号变量时,每次作业运行时必须定义它们,它们拥有较高的优先权。一个JCL符号变量可以通过以下途径设定。

PROC语句:PROC语句表示流内过程的开始,但也可用于编目过程。使用PROC语句定义JCL符号变量的默认值,如果没有分配其他的值,这个默认值将取代用户设定的值。例如:

        //MYPROC  PROC  DSNAME='IBMUSER.DEFAULT.FILE'

EXEC语句调用过程:分配给EXEC语句上的JCL符号变量的值优先于调用过程的默认值。如:

        //STEP1 EXEC PROC=MYPROC,DSNAME='IBMUSER.MY.FILE'

SET语句:在第1个JCL符号变量使用之前,编写JCL中的SET语句。使用SET语句定义JCL符号变量,它们可以用于:✧ JCL作业流里的JCL语句。✧ 过程中的语句(当既不是EXEC语句调用过程,也不是定义JCL符号变量的PROC语句),如:

        //DATA  SET DATASET='IBMUSER.TEST.FILE'

特别注意:分配给JCL符号的值包含特殊字符('、`、,、.、/、&、*、-、+、(、)、=)必须用但可用引号(`)括起来。