📜  JCL-过程(1)

📅  最后修改于: 2023-12-03 14:43:05.403000             🧑  作者: Mango

JCL-过程

JCL(Job Control Language)是IBM主机上运行批处理作业的一种语言,而JCL过程则是JCL中的一个重要概念,它类似于其他编程语言中的子程序或函数,可以将一段可重用的JCL代码逻辑封装在其中,简化批处理作业的编写过程。

创建JCL过程

创建JCL过程十分简单,只需要在JCL文件中定义一个PROC,并在其中填写相关参数即可。

例如,下面这段代码定义了一个名为“TESTPROC”的JCL过程,它接受两个参数,分别为INFILE和OUTFILE。

//TESTPROC PROC INFILE=,OUTFILE=  
//STEP1 EXEC PGM=SORT  
//SORTIN DD DSN=&INFILE,DISP=SHR  
//SORTOUT DD DSN=&OUTFILE,DISP=(NEW,CATLG,DELETE),   
// UNIT=DISK,SPACE=(TRK,(5,5),RLSE)  
//SYSOUT DD SYSOUT=*  
//SYSIN DD *  
  SORT FIELDS=(1,3,CH,A)  
/*  
//  

在JCL文件中调用上述JCL过程,则需要使用以下语法:

//TESTJOB JOB ACCT#,CLASS=6,MSGCLASS=H,REGION=6M  
//STEP1 EXEC TESTPROC,INFILE=IN.DAT,OUTFILE=OUT.DAT  

其中,TESTJOB是整个作业的名称,STEP1是作业步骤的名称,EXEC TESTPROC则是调用JCL过程的语法,INFILE和OUTFILE是传递给JCL过程的参数名称及值。

JCL过程中的变量引用

在JCL过程中,可以使用两种方式来引用参数值。首先可以使用符号“&”将参数名称变为变量引用,例如“&INFILE”表示引用INFILE参数的值。

其次,还可以使用“&&”将变量引用变为可重用的变量,即JCL的“符号表”,以便在整个文件中共用。例如:

//MYPROC PROC INFILE=&INFILE,OUTFILE=&OUTFILE  
//STEP1 EXEC PGM=SORT  
//SORTIN DD DSN=&&INFILE,DISP=SHR  
//SORTOUT DD DSN=&&OUTFILE,DISP=(NEW,CATLG,DELETE),   
// UNIT=DISK,SPACE=(TRK,(5,5),RLSE)  
//SYSOUT DD SYSOUT=*  
//SYSIN DD *  
  SORT FIELDS=(1,3,CH,A)  
/*  
//  

在JCL文件中调用上述JCL过程时,可以利用“&&”定义的符号表来传递参数,例如:

//MYJOB JOB ACCT#,CLASS=6,MSGCLASS=H,REGION=6M  
//STEP1 EXEC MYPROC,INFILE=IN.DAT,OUTFILE=OUT.DAT  
//           ,&&INFILE=IN.DAT2,&&OUTFILE=OUT.DAT2  

其中,MYJOB是整个批处理作业的名称,STEP1是作业步骤的名称,EXEC MYPROC则是调用JCL过程的语法。注意,第二行除了定义了传递给JCL过程的参数值,还利用“&&”定义了两个符号表项。

JCL过程中的IF/THEN/ELSE

JCL过程的还支持IF/THEN/ELSE条件语句来动态地构建过程流程。例如:

//TESTPROC PROC INFILE=,OUTFILE=  
//STEP1 EXEC PGM=IF,COND=((1,EQ,2),EVEN)  
//OUT DD SYSOUT=*  
//IN  DD *  
  1  
  2  
  3  
/*  
//STEP2 EXEC PGM=SORT,COND=(0,EQ,EVEN)  
//SORTIN DD DSN=&INFILE,DISP=SHR  
//SORTOUT DD DSN=&OUTFILE,DISP=(NEW,CATLG,DELETE),   
// UNIT=DISK,SPACE=(TRK,(5,5),RLSE)  
//SYSOUT DD SYSOUT=*  
//SYSIN DD *  
  SORT FIELDS=(1,3,CH,A)  
/*  
//  

上述JCL过程中,STEP1的COND参数指定了条件表达式“((1,EQ,2),EVEN)”,即如果第一行输入为2,则执行跳转到EVEN标签处;否则执行下一条语句。因为第一行输入为1,因此会跳过STEP1,执行STEP2。

STEP2的COND参数指定了条件表达式“(0,EQ,EVEN)”,即如果上一步骤的返回码为偶数,则执行;否则跳过。由于STEP1跳过了,因此STEP2也会被跳过,不被执行。

JCL过程的优点

总的来说,JCL过程有以下几个优点:

  1. 更加简单方便:JCL过程可以将可重用代码逻辑封装在一个过程中,方便重复使用,并减少了JCL文件中重复的代码量。

  2. 更好的维护性:将重复的代码抽象成JCL过程后,可以更容易地维护和修改。

  3. 更好的可读性:JCL过程可以将复杂的代码逻辑封装起来,以便于代码阅读和理解。

  4. 更灵活的控制:JCL过程支持IF/THEN/ELSE条件语句,以便动态地控制过程流程。

结论

JCL过程是JCL编程中非常重要的概念之一,它能够将可重用的JCL代码逻辑封装在一个过程中,提高JCL文件的重用率、简洁性和维护性,同时还能动态地控制过程流程,从而使批处理作业编写变得更加简单和灵活。