
Ved Renden 31 2870 Dyssegaard Tel. +45 23 34 54 43
| 
MainframeSupports tip uge 23/2011:
Overskriften på denne uges tip er nok lidt overdrevet, da JCL på ingen måde supporterer
brugen af REXX, men med nogle ganske få kunstgreb er det muligt at skrive et REXX program
direkte i JCL og eksekvere programmet i et efterfølgende step. Jeg har set princippet anvendt
af andre, men har ikke selv fundet brug for det, indtil en dag jeg havde brug for at anvende
en JCL variabel i noget SYSIN. Desværre understøtter JCL ikke anvendelsen af JCL variable i
SYSIN, så i stedet opfandt jeg følgende stump JCL:
...
// SET PGMNAME=MYSQLPGM
//MAKEREXX EXEC PGM=IEBGENER
//SYSPRINT DD SYSOUT=*
//SYSIN DD DUMMY
//SYSUT2 DD DISP=(NEW,PASS),DSN=&&REXX(REXXPGM),
// SPACE=(TRK,(1,1,1)),RECFM=FB,LRECL=80
//SYSUT1 DD *
/* REXX */
ARG PGMNAME
MYSQLWHR.0 = 1
MYSQLWHR.1 = " WHERE PROGNAME = '"PGMNAME"'"
"EXECIO * DISKW MYSQLWHR (STEM MYSQLWHR. OPEN FINIS)"
/*
//*
//RUNREXX EXEC PGM=IKJEFT01,PARM='%REXXPGM &PGMNAME'
//SYSTSPRT DD SYSOUT=*
//SYSTSIN DD DUMMY
//SYSEXEC DD DISP=(OLD,DELETE),DSN=&&REXX
//MYSQLWHR DD DISP=(NEW,PASS),DSN=&&MYSQLWHR,
// SPACE=(TRK,1),RECFM=FB,LRECL=80
...
Steppet MAKEREXX skriver REXX-koden til dent temporære dataset &&REXX i member REXXPGM. Det
næste step RUNREXX afvikler REXX'en, som skriver en linie i det temporære dataset &&MYSQLWHR,
som jeg anvender i et efterfølgende step til at opbygge et SQL-kald. Det vigtigste her er
dog, at jeg ved hjælp af inline REXX'en kan få overført værdien af JCL variablen PGMNAME
til et dataset, som jeg kan anvende i noget SYSIN (eller et hvilket som helst andet input
dataset for den sags skyld). Jeg kunne også have valgt at danne al SYSIN i REXX'en, men så
ville REXX'en bare blive større og JCL'en sværere at læse og forstå. Hvis du ikke helt har
styr på at concatenere SYSIN data skrevet direkte i JCL'en med datasets, så er det en god
ide at lade REXX'en danne alt input.
Forrige danske tip
Last tip in english
Tip oversigten
|