Ausführen von COBOL-Programmen mit JCL

Kompilieren von COBOL-Programmen

Um ein COBOL-Programm im Batch-Modus mit JCL auszuführen, muss das Programm kompiliert und ein Lademodul mit allen Unterprogrammen erstellt werden. Die JCL verwendet zum Zeitpunkt der Ausführung das Lademodul und nicht das eigentliche Programm. Die Ladebibliotheken werden verkettet und zum Zeitpunkt der Ausführung mit an die JCL übergebenJCLLIB oder STEPLIB.

Zum Kompilieren eines COBOL-Programms stehen viele Mainframe-Compiler-Dienstprogramme zur Verfügung. Einige Unternehmen verwenden Change Management-Tools wieEndevor, die jede Version des Programms kompiliert und speichert. Dies ist nützlich, um die am Programm vorgenommenen Änderungen zu verfolgen.

//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 ist ein IBM COBOL-Compiler-Dienstprogramm. Die Compileroptionen werden mit dem Parameter PARM übergeben. Im obigen Beispiel weist RMODE den Compiler an, den relativen Adressierungsmodus im Programm zu verwenden. Das COBOL-Programm wird mit dem Parameter SYSIN übergeben, und das Copybook ist die Bibliothek, die vom Programm in SYSLIB verwendet wird.

Diese JCL erzeugt das Lademodul des Programms als Ausgabe, die als Eingabe für die Ausführungs-JCL verwendet wird.

Ausführen von COBOL-Programmen

Unten ein JCL-Beispiel, in dem das Programm MYPROG mit der Eingabedatei MYDATA.URMI.INPUT ausgeführt wird und zwei Ausgabedateien erzeugt, die in die Spool geschrieben werden.

//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
/*

Das Lademodul von MYPROG befindet sich in MYDATA.URMI.LOADLIB. Dies ist wichtig zu beachten, dass die obige JCL nur für ein Nicht-DB2-COBOL-Modul verwendet werden kann.

Daten an COBOL-Programme übergeben

Die Dateneingabe in das COBOL-Stapelverarbeitungsprogramm kann über Dateien, den Parameter PARAM und die Anweisung SYSIN DD erfolgen. Im obigen Beispiel:

  • Datensätze werden über die Datei MYDATA.URMI.INPUT an MYPROG übergeben. Diese Datei wird im Programm unter dem DD-Namen INPUT1 referenziert. Die Datei kann im Programm geöffnet, gelesen und geschlossen werden.

  • Die PARM-Parameterdaten ACCT5000 werden im Abschnitt LINKAGE des Programms MYPROG in einer in diesem Abschnitt definierten Variablen empfangen.

  • Die Daten in der SYSIN-Anweisung werden über die ACCEPT-Anweisung in der PROCEDURE-Abteilung des Programms empfangen. Jede ACCEPT-Anweisung liest einen ganzen Datensatz (dh CUST1 1000) in eine im Programm definierte Arbeitsspeichervariable.

Ausführen eines COBOL-DB2-Programms

Zum Ausführen des COBOL DB2-Programms wird in der JCL und im Programm ein spezielles IBM-Dienstprogramm verwendet. Die DB2-Region und die erforderlichen Parameter werden als Eingabe an das Dienstprogramm übergeben.

Die folgenden Schritte werden beim Ausführen eines COBOL-DB2-Programms ausgeführt:

  • Wenn ein COBOL-DB2-Programm kompiliert wird, wird zusammen mit dem Lademodul ein DBRM (Database Request Module) erstellt. Der DBRM enthält die SQL-Anweisungen der COBOL-Programme, deren Syntax auf Richtigkeit überprüft wurde.

  • Das DBRM ist an die DB2-Region (Umgebung) gebunden, in der das COBOL ausgeführt wird. Dies kann mit dem Dienstprogramm IKJEFT01 in einer JCL erfolgen.

  • Nach dem Bindungsschritt wird das COBOL-DB2-Programm unter Verwendung von IKJEFT01 (erneut) mit der Ladebibliothek und der DBRM-Bibliothek als Eingabe für die JCL ausgeführt.

//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
/*

Im obigen Beispiel ist MYCOBB das COBOL-DB2-Programm, das mit IKJEFT01 ausgeführt wird. Beachten Sie, dass der Programmname, die DB2-Subsystem-ID (SSID) und der DB2-Planname in der Anweisung SYSTSIN DD übergeben werden. Die DBRM-Bibliothek ist in der STEPLIB angegeben.