JCL - Procedimientos

los JCL Proceduresson un conjunto de sentencias dentro de un JCL agrupadas para realizar una función particular. Normalmente, la parte fija del JCL se codifica en un procedimiento. La parte variable del trabajo se codifica dentro del JCL.

Puede utilizar un procedimiento para lograr la ejecución paralela de un programa utilizando varios archivos de entrada. Se puede crear un JCL para cada archivo de entrada y se puede llamar a un solo procedimiento simultáneamente pasando el nombre del archivo de entrada como parámetro simbólico.

Sintaxis

A continuación se muestra la sintaxis básica de una definición de procedimiento JCL:

//*
//Step-name EXEC procedure name

El contenido del procedimiento se mantiene dentro del JCL para un procedimiento interno. Los contenidos se mantienen dentro de un miembro diferente de la biblioteca base para un procedimiento catalogado. Este capítulo explicará dos tipos de procedimientos disponibles en JCL y, finalmente, veremos cómo podemos anidar varios procedimientos.

Procedimiento intream

Cuando el procedimiento se codifica dentro del mismo miembro de JCL, se denomina procedimiento en flujo. Debe comenzar con una declaración PROC y terminar con una declaración PEND.

//SAMPINST JOB 1,CLASS=6,MSGCLASS=Y,NOTIFY=&SYSUID
//*
//INSTPROC   PROC                //*START OF PROCEDURE
//PROC1		EXEC PGM=SORT
//SORTIN	DD DSN=&DSNAME,DISP=SHR
//SORTOUT	DD SYSOUT=*MYINCL
//SYSOUT	DD SYSOUT=*
//SYSIN		DD DSN=&DATAC LRECL=80
//           PEND               //*END OF PROCEDURE
//*
//STEP1      EXEC INSTPROC,DSNME=MYDATA.URMI.INPUT1,
//           DATAC=MYDATA.BASE.LIB1(DATA1)
//*
//STEP2      EXEC INSTPROC,DSNME=MYDATA.URMI.INPUT2
//           DATAC=MYDATA.BASE.LIB1(DATA1)
//*

En el ejemplo anterior, el procedimiento INSTPROC se llama en STEP1 y STEP2 utilizando diferentes archivos de entrada. Los parámetros DSNAME y DATAC se pueden codificar con diferentes valores mientras se llama al procedimiento y estos se llaman comosymbolic parameters. La entrada variable al JCL, como nombres de archivo, tarjetas de datos, valores PARM, etc., se pasan como parámetros simbólicos a los procedimientos.

Al codificar parámetros simbólicos, no utilice PALABRAS CLAVE, PARÁMETROS o SUBPARÁMETROS como nombres simbólicos. Ejemplo: No use TIME = & TIME pero sí, puede usar TIME = & TM y se asume como una forma correcta de codificar simbólicos.

Los parámetros simbólicos definidos por el usuario se llaman JCL Symbols. Hay ciertos símbolos llamadossystem symbols, que se utilizan para las ejecuciones de trabajos de inicio de sesión. El único símbolo del sistema utilizado en trabajos por lotes por usuarios normales es&SYSUID y esto se usa en el parámetro NOTIFY en la instrucción JOB.

Procedimiento catalogado

Cuando el procedimiento se separa del JCL y se codifica en un almacén de datos diferente, se denomina Cataloged Procedure. No es obligatorio codificar una instrucción PROC en un procedimiento catalogado. A continuación se muestra un ejemplo de JCL en el que llama al procedimiento CATLPROC:

//SAMPINST JOB 1,CLASS=6,MSGCLASS=Y,NOTIFY=&SYSUID
//*
//STEP EXEC CATLPROC,PROG=CATPRC1,DSNME=MYDATA.URMI.INPUT
//          DATAC=MYDATA.BASE.LIB1(DATA1)

Aquí, el procedimiento CATLPROC está catalogado en MYCOBOL.BASE.LIB1. PROG, DATAC y DSNAME se pasan como parámetros simbólicos al procedimiento CATLPROC.

//CATLPROC PROC PROG=,BASELB=MYCOBOL.BASE.LIB1
//*
//PROC1     EXEC PGM=&PROG
//STEPLIB   DD DSN=&BASELB,DISP=SHR
//IN1       DD DSN=&DSNAME,DISP=SHR
//OUT1      DD SYSOUT=*
//SYSOUT    DD SYSOUT=*
//SYSIN     DD DSN=&DATAC
//*

Dentro del procedimiento, se codifican los parámetros simbólicos PROG y BASELB. Tenga en cuenta que el parámetro PROG dentro del procedimiento se reemplaza por el valor en el JCL y, por lo tanto, PGM toma el valor CATPRC1 durante la ejecución.

Procedimientos anidados

Llamar a un procedimiento desde dentro de un procedimiento se denomina nested procedure. Los procedimientos se pueden anidar hasta en 15 niveles. El anidamiento puede ser completamente in-stream o catalogado. No podemos codificar un procedimiento in-stream dentro de un procedimiento catalogado.

//SAMPINST JOB 1,CLASS=6,MSGCLASS=Y,NOTIFY=&SYSUID
//*
//SETNM     SET DSNM1=INPUT1,DSNM2=OUTPUT1
//INSTPRC1  PROC               //* START OF PROCEDURE 1
//STEP1        EXEC PGM=SORT,DISP=SHR
//SORTIN       DD DSN=&DSNM1,DISP=SHR
//SORTOUT      DD DSN=&DSNM2,DISP=(,PASS)
//SYSOUT       DD SYSOUT=*
//SYSIN        DD DSN=&DATAC
//*
//STEP2        EXEC PROC=INSTPRC2,DSNM2=MYDATA.URMI.OUTPUT2
//          PEND               //* END OF PROCEDURE 1
//*
//INSTPRC2  PROC               //* START OF PROCEDURE 2
//STEP1        EXEC PGM=SORT
//SORTIN       DD DSN=*.INSTPRC1.STEP1.SORTOUT
//SORTOUT      DD DSN=&DSNM2,DISP=OLD
//SYSOUT       DD SYSOUT=*
//SYSIN        DD DSN=&DATAC
//          PEND               //* END OF PROCEDURE 2
//*
//JSTEP1    EXEC INSTPRC1,DSNM1=MYDATA.URMI.INPUT1,
//          DATAC=MYDATA.BASE.LIB1(DATA1)
//*

En el ejemplo anterior, el JCL llama al procedimiento INSTPRC1 en JSTEP1 y se llama al procedimiento INSTPRC2 dentro del procedimiento INSTPRC1. Aquí, la salida de INSTPRC1 (SORTOUT) se pasa como entrada (SORTIN) a INSTPRC2.

UN SET statementse utiliza para definir símbolos de uso común en todos los pasos o procedimientos del trabajo. Inicializa los valores anteriores en los nombres simbólicos. Debe definirse antes del primer uso de los nombres simbólicos en el JCL.

Echemos un vistazo a la descripción a continuación para comprender un poco más sobre el programa anterior:

  • El parámetro SET inicializa DSNM1 = INPUT1 y DSNM2 = OUTPUT1.

  • Cuando se llama a INSTPRC1 en JSTEP1 de JCL, DSNM1 = MYDATA.URMI.INPUT1 y DSNM2 = OUTPUT1., Es decir, el valor inicializado en la sentencia SET se restablece con el valor establecido en cualquiera de los pasos / procedimientos del trabajo.

  • Cuando se llama a INSTPRC2 en el PASO2 de INSTPRC1, DSNM1 = MYDATA.URMI.INPUT1 y DSNM2 = MYDATA.URMI.OUTPUT2.