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.