Exécution de programmes COBOL à l'aide de JCL

Compilation de programmes COBOL

Afin d'exécuter un programme COBOL en mode batch à l'aide de JCL, le programme doit être compilé et un module de chargement est créé avec tous les sous-programmes. Le JCL utilise le module de chargement et non le programme réel au moment de l'exécution. Les bibliothèques de chargement sont concaténées et transmises au JCL au moment de l'exécution à l'aide deJCLLIB ou STEPLIB.

Il existe de nombreux utilitaires de compilation mainframe disponibles pour compiler un programme COBOL. Certaines entreprises utilisent des outils de gestion du changement commeEndevor, qui compile et stocke chaque version du programme. Ceci est utile pour suivre les modifications apportées au programme.

//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 est un utilitaire de compilation IBM COBOL. Les options du compilateur sont transmises à l'aide du paramètre PARM. Dans l'exemple ci-dessus, RMODE indique au compilateur d'utiliser le mode d'adressage relatif dans le programme. Le programme COBOL est transmis à l'aide du paramètre SYSIN et le cahier est la bibliothèque utilisée par le programme dans SYSLIB.

Ce JCL produit le module de chargement du programme comme sortie qui est utilisé comme entrée du JCL d'exécution.

Exécution de programmes COBOL

Ci-dessous, un exemple JCL où le programme MYPROG est exécuté à l'aide du fichier d'entrée MYDATA.URMI.INPUT et produit deux fichiers de sortie écrits dans le 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
/*

Le module de chargement de MYPROG se trouve dans MYDATA.URMI.LOADLIB. Il est important de noter que le JCL ci-dessus ne peut être utilisé que pour un module COBOL non DB2.

Transmission de données aux programmes COBOL

L'entrée de données dans le programme de commandes COBOL peut se faire via des fichiers, le paramètre PARAM et l'instruction SYSIN DD. Dans l'exemple ci-dessus:

  • Les enregistrements de données sont transmis à MYPROG via le fichier MYDATA.URMI.INPUT. Ce fichier sera référencé dans le programme en utilisant le nom DD INPUT1. Le fichier peut être ouvert, lu et fermé dans le programme.

  • Les données de paramètre PARM ACCT5000 sont reçues dans la section LINKAGE du programme MYPROG dans une variable définie dans cette section.

  • Les données de l'instruction SYSIN sont reçues via l'instruction ACCEPT dans la division PROCEDURE du programme. Chaque instruction ACCEPT lit un enregistrement entier (c'est-à-dire CUST1 1000) dans une variable de stockage de travail définie dans le programme.

Exécution d'un programme COBOL-DB2

Pour exécuter le programme COBOL DB2, un utilitaire IBM spécialisé est utilisé dans le JCL et le programme; La région DB2 et les paramètres requis sont transmis en entrée à l'utilitaire.

Les étapes ci-dessous sont suivies lors de l'exécution d'un programme COBOL-DB2:

  • Lors de la compilation d'un programme COBOL-DB2, un DBRM (Database Request Module) est créé avec le module de chargement. Le DBRM contient les instructions SQL des programmes COBOL dont la syntaxe a été vérifiée.

  • Le DBRM est lié à la région DB2 (environnement) dans laquelle le COBOL sera exécuté. Cela peut être fait à l'aide de l'utilitaire IKJEFT01 dans un JCL.

  • Après l'étape de liaison, le programme COBOL-DB2 est exécuté en utilisant IKJEFT01 (à nouveau) avec la bibliothèque de chargement et la bibliothèque DBRM comme entrée du 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
/*

Dans l'exemple ci-dessus, MYCOBB est le programme COBOL-DB2 exécuté à l'aide de IKJEFT01. Veuillez noter que le nom du programme, l'ID de sous-système DB2 (SSID) et le nom du plan DB2 sont transmis dans l'instruction SYSTSIN DD. La bibliothèque DBRM est spécifiée dans STEPLIB.