IBM大型机操作系统 学习笔记(4)

昨天学习了实用程序的调用,鉴于时间关系,只实践了IBEGENER的内容,等有时间了再补上。今天学习了流内过程和编目过程的调用,感觉哈好,就是有一点让我很不爽:我写不出复杂点的JCL语句。这个就郁闷了。没办法,慢慢熟悉吧。

[基本概念]

过程 :过程是一段预先编写好的JCL语句的集合,它可以被反复调用.包括编目过程和流内过程.

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

流内过程 : 放置在作业输入流中的过程. 在一个作业中最多可以有15个流内过程. 不能嵌套使用,也不能被其他作业调用.流内过程和编目过程不同,前者随着一个作业放在输入流中,紧跟在JOB语句之后. 一般而言,流内过程只用于测试阶段,一旦测试通过,即可对其进行编目,即转变为编目过程.

[流内过程]

//R123 JOB (456),”SMITH”,CLASS=A#这行 very重要 ,不可漏掉
//RUN PROC# 开始定义一个过程, 此句必须紧跟在JOB语句后面
//GO EXEC PGM=ONE
//SYSOUT DD SYSOUT=A
// PEND# 标志一个流内过程的结束(编目过程不需要此句)
//STEP1 EXEC RUN#调用RUN这个流内过程

[编目过程]

该编目过程存放在ST018.PDS.LIB(PROC1)里面

//RUN PROC# 开始定义一个过程, 此句必须紧跟在JOB语句后面
//GO EXEC PGM=ONE
//SYSOUT DD SYSOUT=A

调用该编目过程的JCL语句写在另外一个文件

//MYJOB JOB ....

//MYLIB JCLLIB ORDER=ST018.PDS.LIB#此步非常之重要,定义一个Private LIB,

//STP1 EXEC PROC=PROC1#开始调用,注意:过程名不是RUN,而是PROC1,即成员名

过程的修改:

[修改DD语句]

//INVOKE EXECTRANSACT
//procstepname.ddname DD parameter=value

说明:

if(procstepname.ddname 不在 parameter.procstepname中)

{

新增DD语句ddname

}

else

{

if(parameter存在于过程中) then 覆盖原来parameter 的值

if(parameter不存在于过程中)then 新增参数

if(value==' ') then 还原参数parameter的默认值

if(被调用过程中存在不是parameter的参数)then 保留那些参数值

}

若要使得DD语句无效,请参照下面格式

//PROCSTEPNAME.DDNAME DD DUMMY

或者

//PROCSTEPNAME.DDNAME DD DSN=NULLFILE

特别提醒: 该做法对BCD参数无效. 如果要连BCD也作用的话, 看下面的格式:

This is a DD statement in a procedure called PSTEP1:
//DD3 DD DSN=MYDSET,DISP=SHR,
// DCB=(RECFM=FB,
// BLKSIZE=160,LRECL=80)

In order to nullify the entire DCB parameter of the DD statement, each DCB keyword subparameter specifiedin the procedure definition must be nullified as shown below:

//PSTEP1.DD3 DD DCB=(RECFM=,BLKSIZE=,LRECL=)

[修改EXEC语句]

//STEPNAME EXEC TRANSACT,PARAMETER.STEPNAME = VALUE

其他的与修改DD语句基本相同.不再累述.

[使用符号参数]

定义符号参数(必须在过程中定义):

//.........,parameter=& A#A是符号

赋值符号参数:

方法一

TRANSACT definition:
//PSTEP1 EXEC PGM=PROG1,
// ACCT=&DEPT1
//PSTEP2 EXEC PGM=PROG2,
// ACCT=&DEPT2
Assigning values to &DEPT:
//JSTEP EXEC TRANSACT,
// DEPT1=GRP50,
// DEPT2=GRP100

方法二

TRANSACT definition:
//PSTEP1 EXEC PGM=PROG1,
// ACCT=&DEPT1
//PSTEP2 EXEC PGM=PROG2,
// ACCT=&DEPT2
Assigning values to &DEPT1:
// SET DEPT1=GRP100
//JSTEP EXEC TRANSACT

小结:

昨天因为某些原因,放纵自己过度,卡丁至深夜不止,今天没爬起来上课,于是串到下午,呵呵.不过总体还算跟上,高兴啊.老师今天还讲了COND参数的使用,因为前面已经整理过了,所以不再累述.

几点需注意的:

1、调用编目过程时,记得加入过程库

2、过程中禁止出现“/*”、“//DDNAME DD *”,否则,我也不知道会怎样

3、请求卷的时候,如果填写的卷不存在,会造成作业占着主机资源不放。解决办法,在TIME里面设置一下应该可以,不过我还没亲自实现过,理论上是这么说的。

PS:各位来我空间的XDJM ,敬请冒个泡,在这里特别点名批评小李,还有达华。。呵呵哈哈^_^

猜你喜欢

转载自leowzy.iteye.com/blog/888936