Job Control LanguageJob Control Language, beter bekend onder de afkorting JCL, is een scripttaal die op de mainframes van IBM wordt gebruikt om opdrachten te geven aan het Job Entry Subsystem (JES2 of JES3) waarmee een programma of subsysteem kan worden gestart. Met JCL kan CPU-tijd op mainframes tussen verschillende processen worden verdeeld en over de tijd worden gespreid. Dat gaat aan de hand van de aan de processen toegekende prioriteit. SyntaxisOm compatibel te zijn met bestaande programmatuur is de syntaxis van JCL, dat ook in het huidige z/OS wordt gebruikt, sinds de jaren 1960 niet gewijzigd. JCL wordt gekenmerkt door het tweetal schuine strepen, door slashes, die het begin van ieder statement aangeven. Dit gebruik van schuine strepen als beginmarkering komt uit de tijd dat nog ponskaarten werden gebruikt om JCL-code in te voeren. Als de stapel ponskaarten per ongeluk achterstevoren in de kaartlezer werd geplaatst, stonden de schuine strepen niet aan het begin van de regel en werd de stapel ponskaarten afgekeurd. //USER0001 JOB REKNR01,JORIS,CLASS=7,MSGCLASS=X FACTUREN MAKEN //VRAAGOP EXEC PGM=REKINF,TIME=(,50) //INVOER DD DSN=SYSUSR1.SYSTEM.INPUT,DISP=SHR OPENEN //OPSLAAN DD SYSOUT=* Een JCL-regel moet voldoen aan volgende voorwaarden:
JOB//USR007 JOB ACCN099,JODY,CLASS=6,MSGCLASS=X
EXEC//STAP1 EXEC PGM=INLEZEN,COND=(0,NE),PARM=(ZIN=OPLOPEND,AANTAL=100)
DD//INVOER DD DSN=ISUSR.USR007.INPUT,DISP=SHR //UITVOER DD DSN=ISUSR.USR007.OUTPUT,DISP=(NEW,KEEP,DELETE), // DCB=(RECFM=FB,LRECL=80),SDORG=PO, // SPACE=(TRK,(5,3,10)) //UITVOER2 DD DSN=ISUSR.USR007.OUTPUT,DISP=(NEW,KEEP,DELETE), // REFDD=*.STEP1.UITVOER //MANUEEL DD * 04/01/1980 13/09/1979 10/12/1982 15/03/1986 /*
Er bestaan ook vooraf gespecifieerde namen voor bepaalde datasets:
INCLUDE//USR009 JOB ACCN099,APRILIA,CLASS=8,MSGCLASS=X //VERWYZING JCLLIB ORDER=(ISUSR.USR007.SOURCE,ISUSR.USR009.SOURCE) //GO EXEC PGM=P3OEF4 //STEPLIB DD DSN=ISUSR.COBOL.LINKLIB,DISP=SHR //TOEVOEGEN INCLUDE MEMBER=OEF3 //
PROC//DEMOJCL PROC //STAPA EXEC PGM=OEF7,TIME=(,08),REGION=&GROOTTE //STEPLIB DD DSN=&PREFIX..COBOL.LINKLIB,DISP=SHR //INVOER DD DSN=&PREFIX..LIST,DISP=SHR // PEND //PROC12 EXEC DEMOJCL,GROOTTE=256K,PREFIX=ISUSR Procedures laten toe om modulair te werken; ze kan op verschillende plaatsen opgeroepen worden. Bovendien kunnen variabele parameters gebruikt worden: de ampersand & en het punt (indien noodzakelijk) begrenzen de parameternaam JCL-outputIn de SPOOL, de Simultaneous Peripheral Operations On-Line, komt de informatie over het proeflezen en uitvoeren van het script terecht. Het script zelf wordt hier ook in opgenomen. Opgeroepen procedures uit het script zelf worden voorafgegaan door ++ in plaats van //; de procedures die met INCLUDE ingevoegd worden vanuit een ander bestand, worden voorafgegaan door XX. Voorbeeld//SU0003CL JOB (XXXX000),'TEST',CLASS=7,MSGCLASS=X //********************************************************************** //** **** //* PLEASE FILL IN THE COURSE DATASET PREFIX ON THE NEXT LINE //** **** //********************************************************************** //JCLPROG PROC PREFIX='.........' //********************************************************************** //* COMPILE THE COBOL PROGRAM //********************************************************************** //COB EXEC PGM=IGYCRCTL //STEPLIB DD DSN=SYS3.IGY.V2R1M0.SIGYCOMP.LOCU,DISP=SHR //SYSLIB DD DSN=TBISUSR.JCLCRS.SOURCE,DISP=SHR //SYSLIN DD DSN=&&OBJECT,DISP=(MOD,PASS),SPACE=(CYL,(1,5)) //SYSTERM DD SYSOUT=* //SYSPRINT DD SYSOUT=* //SYSUDUMP DD SYSOUT=* //SYSUT1 DD SPACE=(CYL,(2,5)),UNIT=SYSDA //SYSUT2 DD SPACE=(CYL,(2,5)),UNIT=SYSDA //SYSUT3 DD SPACE=(CYL,(2,5)),UNIT=SYSDA //SYSUT4 DD SPACE=(CYL,(2,5)),UNIT=SYSDA //SYSUT5 DD SPACE=(CYL,(2,5)),UNIT=SYSDA //SYSUT6 DD SPACE=(CYL,(2,5)),UNIT=SYSDA //SYSUT7 DD SPACE=(CYL,(2,5)),UNIT=SYSDA //SYSIN DD DSN=&PREFIX..JCLCRS.SOURCE(&MEMBER),DISP=SHR //********************************************************************** //* LINK EDIT THE COBOL PROGRAM //********************************************************************** //LKED EXEC PGM=IEWL,PARM='LIST,MAP,XREF',COND=(8,LE) //SYSUT1 DD SPACE=(CYL,(1,1)),UNIT=SYSDA //SYSPRINT DD SYSOUT=* //SYSLIB DD DSN=SYS2.COBOL2.LOAD,DISP=SHR // DD DSN=SYS2.COBOL2.SUB.LOAD,DISP=SHR // DD DSN=SYS2.COBOL2.SUB.LPA.LOAD,DISP=SHR // DD DSN=&PREFIX..JCLCRS.LOAD,DISP=SHR //SYSLMOD DD DSN=&PREFIX..JCLCRS.LOAD(&MEMBER),DISP=SHR //SYSLIN DD DSN=&&OBJECT,DISP=(OLD,DELETE) // PEND //**********************************************************************00010000 //CREATSUB EXEC JCLPROG,MEMBER=SUBRETCD //CREATPGM EXEC JCLPROG,MEMBER=PGMRETCD // Websites
|