Ejecución de programas COBOL mediante JCL

Compilación de programas COBOL

Para ejecutar un programa COBOL en modalidad de proceso por lotes utilizando JCL, es necesario compilar el programa y crear un módulo de carga con todos los subprogramas. El JCL utiliza el módulo de carga y no el programa real en el momento de la ejecución. Las bibliotecas de carga se concatenan y se entregan al JCL en el momento de la ejecución utilizandoJCLLIB o STEPLIB.

Hay muchas utilidades de compilación de mainframe disponibles para compilar un programa COBOL. Algunas empresas corporativas utilizan herramientas de gestión del cambio comoEndevor, que compila y almacena todas las versiones del programa. Esto es útil para rastrear los cambios realizados en el programa.

//COMPILE   JOB ,CLASS=6,MSGCLASS=X,NOTIFY=&SYSUID             
//*            
//STEP1     EXEC IGYCRCTL,PARM=RMODE,DYNAM,SSRANGE
//SYSIN     DD DSN=MYDATA.URMI.SOURCES(MYCOBB),DISP=SHR
//SYSLIB    DD DSN=MYDATA.URMI.COPYBOOK(MYCOPY),DISP=SHR
//SYSLMOD   DD DSN=MYDATA.URMI.LOAD(MYCOBB),DISP=SHR
//SYSPRINT  DD SYSOUT=*
//*

IGYCRCTL es una utilidad de compilación de IBM COBOL. Las opciones del compilador se pasan mediante el parámetro PARM. En el ejemplo anterior, RMODE indica al compilador que use el modo de direccionamiento relativo en el programa. El programa COBOL se pasa utilizando el parámetro SYSIN y el libro de copias es la biblioteca utilizada por el programa en SYSLIB.

Este JCL produce el módulo de carga del programa como salida que se utiliza como entrada al JCL de ejecución.

Ejecución de programas COBOL

A continuación, se muestra un ejemplo de JCL en el que el programa MYPROG se ejecuta utilizando el archivo de entrada MYDATA.URMI.INPUT y produce dos archivos de salida escritos en el spool.

//COBBSTEP  JOB CLASS=6,NOTIFY=&SYSUID
//
//STEP10    EXEC PGM=MYPROG,PARM=ACCT5000
//STEPLIB   DD DSN=MYDATA.URMI.LOADLIB,DISP=SHR
//INPUT1    DD DSN=MYDATA.URMI.INPUT,DISP=SHR
//OUT1      DD SYSOUT=*
//OUT2      DD SYSOUT=*
//SYSIN     DD *
//CUST1     1000
//CUST2     1001
/*

El módulo de carga de MYPROG se encuentra en MYDATA.URMI.LOADLIB. Es importante tener en cuenta que el JCL anterior solo se puede utilizar para un módulo COBOL que no sea DB2.

Pasar datos a programas COBOL

La entrada de datos al programa por lotes COBOL puede ser a través de archivos, parámetro PARAM y declaración SYSIN DD. En el ejemplo anterior:

  • Los registros de datos se pasan a MYPROG a través del archivo MYDATA.URMI.INPUT. Este archivo será referido en el programa usando el nombre de DD INPUT1. El archivo se puede abrir, leer y cerrar en el programa.

  • Los datos del parámetro PARM ACCT5000 se reciben en la sección LINKAGE del programa MYPROG en una variable definida dentro de esa sección.

  • Los datos de la sentencia SYSIN se reciben a través de la sentencia ACCEPT en la división PROCEDURE del programa. Cada instrucción ACCEPT lee un registro completo (es decir, CUST1 1000) en una variable de almacenamiento de trabajo definida en el programa.

Ejecución de un programa COBOL-DB2

Para ejecutar el programa COBOL DB2, se utiliza la utilidad IBM especializada en el JCL y el programa; La región DB2 y los parámetros necesarios se pasan como entrada a la utilidad.

Se siguen los pasos siguientes para ejecutar un programa COBOL-DB2:

  • Cuando se compila un programa COBOL-DB2, se crea un DBRM (Módulo de solicitud de base de datos) junto con el módulo de carga. El DBRM contiene las sentencias SQL de los programas COBOL con su sintaxis verificada para que sea correcta.

  • El DBRM está vinculado a la región (entorno) de DB2 en la que se ejecutará COBOL. Esto se puede hacer utilizando la utilidad IKJEFT01 en un JCL.

  • Después del paso de vinculación, el programa COBOL-DB2 se ejecuta utilizando IKJEFT01 (nuevamente) con la biblioteca de carga y la biblioteca DBRM como entrada al JCL.

//STEP001  EXEC PGM=IKJEFT01
//*
//STEPLIB  DD DSN=MYDATA.URMI.DBRMLIB,DISP=SHR
//*
//input files
//output files
//SYSPRINT DD SYSOUT=*
//SYSABOUT DD SYSOUT=*
//SYSDBOUT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//DISPLAY  DD SYSOUT=*
//SYSOUT   DD SYSOUT=*
//SYSTSPRT DD SYSOUT=*
//SYSTSIN  DD *
    DSN SYSTEM(SSID)
    RUN PROGRAM(MYCOBB) PLAN(PLANNAME) PARM(parameters to cobol program) -
    LIB('MYDATA.URMI.LOADLIB')
    END
/*

En el ejemplo anterior, MYCOBB es el programa COBOL-DB2 que se ejecuta con IKJEFT01. Tenga en cuenta que el nombre del programa, el ID del subsistema DB2 (SSID) y el nombre del plan DB2 se pasan dentro de la declaración SYSTSIN DD. La biblioteca DBRM se especifica en STEPLIB.