Esecuzione di programmi COBOL utilizzando JCL

Compilazione di programmi COBOL

Per eseguire un programma COBOL in modalità batch utilizzando JCL, il programma deve essere compilato e viene creato un modulo di caricamento con tutti i sottoprogrammi. JCL utilizza il modulo di caricamento e non il programma effettivo al momento dell'esecuzione. Le librerie di caricamento vengono concatenate e fornite al JCL al momento dell'esecuzione utilizzandoJCLLIB o STEPLIB.

Sono disponibili molte utilità di compilazione mainframe per compilare un programma COBOL. Alcune società aziendali utilizzano strumenti di gestione del cambiamento comeEndevor, che compila e archivia ogni versione del programma. Ciò è utile per tenere traccia delle modifiche apportate al programma.

//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 è un'utilità di compilazione COBOL IBM. Le opzioni del compilatore vengono passate utilizzando il parametro PARM. Nell'esempio precedente, RMODE indica al compilatore di utilizzare la modalità di indirizzamento relativo nel programma. Il programma COBOL viene passato utilizzando il parametro SYSIN e il quaderno è la libreria utilizzata dal programma in SYSLIB.

Questo JCL produce il modulo di caricamento del programma come output che viene utilizzato come input per l'esecuzione JCL.

Esecuzione di programmi COBOL

Di seguito un esempio JCL in cui il programma MYPROG viene eseguito utilizzando il file di input MYDATA.URMI.INPUT e produce due file di output scritti nello 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
/*

Il modulo di caricamento di MYPROG si trova in MYDATA.URMI.LOADLIB. Ciò è importante per notare che il JCL sopra può essere utilizzato solo per un modulo COBOL non DB2.

Passaggio di dati ai programmi COBOL

L'input dei dati al programma batch COBOL può avvenire tramite file, parametro PARAM e istruzione SYSIN DD. Nell'esempio sopra:

  • I record di dati vengono passati a MYPROG tramite il file MYDATA.URMI.INPUT. Questo file verrà indicato nel programma utilizzando il nome DD INPUT1. Il file può essere aperto, letto e chiuso nel programma.

  • Il dato del parametro PARM ACCT5000 viene ricevuto nella sezione LINKAGE del programma MYPROG in una variabile definita all'interno di quella sezione.

  • I dati nell'istruzione SYSIN vengono ricevuti tramite l'istruzione ACCEPT nella divisione PROCEDURE del programma. Ogni istruzione ACCEPT legge un intero record (cioè, CUST1 1000) in una variabile di memorizzazione di lavoro definita nel programma.

Esecuzione di un programma COBOL-DB2

Per eseguire il programma COBOL DB2, viene utilizzata un'utilità IBM specializzata in JCL e nel programma; La regione DB2 ei parametri richiesti vengono passati come input al programma di utilità.

I seguenti passaggi sono seguiti per eseguire un programma COBOL-DB2:

  • Quando viene compilato un programma COBOL-DB2, viene creato un DBRM (Database Request Module) insieme al modulo di caricamento. Il DBRM contiene le istruzioni SQL dei programmi COBOL con la sintassi verificata per essere corretta.

  • Il DBRM è associato alla regione (ambiente) DB2 in cui verrà eseguito COBOL. Questa operazione può essere eseguita utilizzando l'utilità IKJEFT01 in un JCL.

  • Dopo la fase di bind, il programma COBOL-DB2 viene eseguito utilizzando IKJEFT01 (di nuovo) con la libreria di caricamento e la libreria DBRM come input per 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
/*

Nell'esempio precedente, MYCOBB è il programma COBOL-DB2 eseguito utilizzando IKJEFT01. Notare che il nome del programma, l'ID del sottosistema DB2 (SSID) e il nome del piano DB2 vengono passati nell'istruzione SYSTSIN DD. La libreria DBRM è specificata in STEPLIB.