qinling072 发表于 2017-5-26 12:27:18

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)
  Inorder to nullify the entire DCB parameter of the DD statement, each DCBkeyword 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 ,敬请冒个泡,在这里特别点名批评小李,还有达华。。呵呵哈哈^_^
页: [1]
查看完整版本: IBM大型机操作系统 学习笔记(4)