Here is a good example of extensive use of the if/then/else construct in
jcl that I ran across just this week. I can't claim to have originated
it but I surely stole a copy for my personal jcllib. 


 //STEP0010  EXEC PGM=GIMSMP,REGION=6M
//SMPCSI    DD   DISP=SHR,DSN=SMPE.Z19.GLOBAL.CSI
//TGTDD     DD   DSN=SVS.MIRROR.RESZP2.TO.RESZS3.D090624,
//          DISP=(NEW,CATLG),
//          SPACE=(CYL,(100,50),RLSE),UNIT=SYSDA
//SMPLOG    DD   SYSOUT=*
//SMPLOGA   DD   SYSOUT=*
//SMPCNTL   DD   *
  SET BOUNDARY(RESZP2) .
      ZONEEXPORT
        (RESZP2)   /* source ResVol zone */
        OUTFILE(TGTDD) NOPURGE.
/*
//          IF (STEP0010.RC EQ 0) THEN
//STEP0015  EXEC PGM=GIMSMP,REGION=6M
//SMPCSI    DD   DISP=SHR,DSN=SMPE.Z19.GLOBAL.CSI
//SMPOUT    DD   SYSOUT=*
//SMPLOG    DD   SYSOUT=*
//SMPLOGA   DD   SYSOUT=*
//SMPCNTL   DD   *
  SET BOUNDARY(RESZS3)
      /*
         This will generate a non-zero return code if
         the zone is not defined. As would be the case
         the first time we clone to a new sysres volume
      */
       .
/*
//*
//CHKTZONE IF (STEP0015.RC EQ 0) THEN
//*
//*   zero return from step0019 means target zone exists, back it
//*       up and drop the zone index (purge) from global
//*
//STEP0017  EXEC PGM=GIMSMP,REGION=6M
//SMPCSI    DD   DISP=SHR,DSN=SMPE.Z19.GLOBAL.CSI
//SMPLOG    DD   SYSOUT=*
//SMPLOGA   DD   SYSOUT=*
//TGTDD     DD   DSN=SVS.MIRROR.RESZS3.BKUP.D090624,DISP=(NEW,CATLG),
//          SPACE=(CYL,(100,50),RLSE),UNIT=SYSDA
//SMPCNTL   DD   *
  SET BOUNDARY(RESZS3) .
      ZONEEXPORT
        (RESZS3)   /* new ResVol zone */
        OUTFILE(TGTDD) PURGE(INDEX).
/*
//*
//CHKTZONE ELSE
//*
//*   Brand New target zone, nothing to back up or purge
//*      so set good return code for later checks
//*
//STEP0018  EXEC PGM=IEFBR14
//*
//CHKTZONE ENDIF
//*
//          IF ((STEP0017.RUN AND STEP0017.RC=0) OR
//          STEP0018.RC = 0) THEN
//STEP0020  EXEC PGM=IEFBR14
//          ENDIF
//          ENDIF
//          IF (STEP0010.RC EQ 0 AND
//          STEP0020.RC EQ 0) THEN
//*
//* DELETE AND CLONE SMPE TRACKING PDS DATASETS AND LOGS
//*   for the cloned target
//*
//STEP0024  EXEC PGM=IDCAMS
//SYSPRINT  DD   SYSOUT=*
//SYSIN     DD   *
   DELETE  SMPE.Z19.RESZS3.SMPLTS
   DELETE  SMPE.Z19.RESZS3.SMPMTS
   DELETE  SMPE.Z19.RESZS3.SMPSCDS
   DELETE  SMPE.Z19.RESZS3.SMPSTS
   DELETE  SMPE.Z19.RESZS3.SMPTLOG
   DELETE  SMPE.Z19.RESZS3.SMPTLOGA
   SET MAXCC = 0
//STEP0026  EXEC PGM=ADRDSSU
//SYSPRINT  DD   SYSOUT=*
//SYSIN     DD   *
 COPY   DATASET( INCL(SMPE.Z19.RESZP2.SMPTLOG  )) -
        CONCURRENT NOTIFYCONCURRENT -
            CATALOG TOL(ENQF) WAIT(2,30) -
            STORCLAS ( SCNONSMS ) OUTDYNAM(OMVSS3) -
      RENUNC( (SMPE.Z19.RESZP2.SMPTLOG     , -
               SMPE.Z19.RESZS3.SMPTLOG      )         -
             )
//          ENDIF
//          IF (STEP0010.RC EQ 0 AND
//          STEP0020.RC EQ 0 AND
//          STEP0026.RC LE 4) THEN
//STEP0030  EXEC PGM=GIMSMP,REGION=6M
//SMPCSI    DD   DISP=SHR,DSN=SMPE.Z19.GLOBAL.CSI
//SMPCNTL   DD   *
  SET BOUNDARY(GLOBAL).
      UCLIN.
      ADD GZONE ZINDEX ((RESZS3,SMPE.Z19.RESZS3.CSI,TARGET)) .
      ENDUCL.
/*
//          ENDIF
//          IF (STEP0010.RC EQ 0 AND
//          STEP0020.RC EQ 0 AND
//          STEP0026.RC LE 4 AND
//          STEP0030.RC EQ 0) THEN
//***************************************************************//
//*         DEFINE THE ZONE                                     *//
//***************************************************************//
//STEP0040  EXEC PGM=IDCAMS
//SYSPRINT  DD   SYSOUT=*
//SYSIN     DD   *
  DELETE SMPE.Z19.RESZS3.CSI
  SET MAXCC = 0
  DEFINE CLUSTER(+
                  NAME(SMPE.Z19.RESZS3.CSI) +
                  FREESPACE(25,10) +
                  KEYS(24 0) +
                  CYLINDERS(2 1)    CISZ(4096) +
                )
/*
//          ENDIF
//          IF (STEP0010.RC EQ 0 AND
//          STEP0020.RC EQ 0 AND
//          STEP0026.RC LE 4 AND
//          STEP0030.RC EQ 0 AND
//          STEP0040.RC EQ 0) THEN
//***************************************************************//
//*         INIT   THE ZONE                                     *//
//***************************************************************//
//STEP0050  EXEC PGM=IDCAMS
//SMPZONE   DD   DISP=SHR,DSN=SMPE.Z19.RESZS3.CSI
//ZPOOL     DD   DSN=SYS1.MACLIB(GIMZPOOL),DISP=SHR,
//          UNIT=SYSDA,VOL=SER=RESZP2
//SYSPRINT  DD   SYSOUT=*
//SYSIN     DD   *
 REPRO OUTFILE(SMPZONE) INFILE(ZPOOL)
/*
//          ENDIF
//          IF (STEP0010.RC EQ 0 AND
//          STEP0020.RC EQ 0 AND
//          STEP0026.RC LE 4 AND
//          STEP0030.RC EQ 0 AND
//          STEP0040.RC EQ 0 AND
//          STEP0050.RC EQ 0) THEN
//STEP0060  EXEC PGM=GIMSMP,REGION=6M
//SMPCSI    DD   DISP=SHR,DSN=SMPE.Z19.GLOBAL.CSI
//DD1       DD   DSN=SVS.MIRROR.RESZP2.TO.RESZS3.D090624,DISP=OLD
//SMPLOG    DD   DUMMY
//SMPCNTL   DD   *
  SET BOUNDARY(RESZS3) .
      ZONEIMPORT (RESZP2) INFILE(DD1) INTO(RESZS3) RELATED(ZOS19D)
      OPTIONS(ZOSOPT).
/*
//          ENDIF
//          IF (STEP0010.RC EQ 0 AND
//          STEP0020.RC EQ 0 AND
//          STEP0026.RC LE 4 AND
//          STEP0030.RC EQ 0 AND
//          STEP0040.RC EQ 0 AND
//          STEP0050.RC EQ 0 AND
//          STEP0060.RC LE 4) THEN
//STEP0070  EXEC PGM=GIMSMP,REGION=6M
//SMPCSI    DD   DISP=SHR,DSN=SMPE.Z19.GLOBAL.CSI
//SMPLOG    DD   SYSOUT=*
//SMPLOGA   DD   SYSOUT=*
//SMPCNTL   DD   *
 SET BOUNDARY(RESZS3) .
   ZONEEDIT DDDEF .
     IF (VOLUME=RESZP2)
       CHANGE   VOLUME(RESZP2,RESZS3) .
   ENDZONEEDIT.
   ZONEEDIT DDDEF .
     CHANGE   PATH('/Service/RESZP2'*,'/Service/RESZS3'*).
   ENDZONEEDIT.
 SET BOUNDARY(RESZS3) .
   ZONEEDIT DDDEF .
     IF (DATASET=SMPE.Z19.RESZP2.SMPTLOG)
       CHANGE DATASET(SMPE.Z19.RESZP2.*,SMPE.Z19.RESZS3.*).
   ENDZONEEDIT.
/*
//          ENDIF
//*
//*   abend with 806 to let me know something wasn't kosher
//*
//          IF (STEP0010.RC GT 0 OR
//          STEP0020.RC GT 0 OR
//          STEP0026.RC GT 4 OR
//          STEP0030.RC GT 0 OR
//          STEP0040.RC GT 0 OR
//          STEP0050.RC GT 0 OR
//          STEP0060.RC GT 4 OR
//          STEP0070.RC GT 0) THEN
//ABEND     EXEC PGM=ABEND806
//          ENDIF


Ken Klein
Sr. Systems Programmer
Hi Michael,

the IF THEN ELSE construct is useful to check step condition codes. You
can for example decide weather a step should run after a previous one
depending on its result. This is similar to the COND parameter in the
EXEC cards. From my experiences you cannot evaluate JCL symbols. To exec
batch depending on external conditions, I would prefer to set up an
OPC/TWS application from the questioned job steps. Well, under certain
circumstances I found it sufficient to generate the desired JCL with
IEBEDIT and then submit it by IKJEFTxx or just having a small REXX-Exec
as a kind of wrap-around. 

Cheers
Michael




Michael Knigge <[email protected]> Gesendet von: IBM
Mainframe Discussion List <[email protected]>
25.06.2009 10:35
Bitte antworten an
IBM Mainframe Discussion List <[email protected]>


An
[email protected]
Kopie

Thema
IF-Statement in JCL






All,


is it possible to control the steps to be executed by a IF-Statement, i.

e. with a variable?

Like this:

// SET SWITCH1=YES
// SET SWITCH2=NO
//*
//* EXECUTE ONLY IF SWITCH1 IS SET TO YES
//IF SWITCH1=YES
//STEP01  EXEC PGM=IEBGENER
//... more stuff
//ENDIF
//*
//* EXECUTE ONLY IF SWITCH2 IS SET TO YES
//IF SWITCH2=YES
//STEP02  EXEC PGM=IEBGENER
//... more stuff
//ENDIF
//*


If I've understood the JCL docs corretly there are only some predefined 
variables (like "RC") that can be checked... I wonder if there is a
way...


Thanks....

Bye,
Michael

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to [email protected] with the message: GET IBM-MAIN INFO
Search the archives at http://bama.ua.edu/archives/ibm-main.html

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to [email protected] with the message: GET IBM-MAIN INFO
Search the archives at http://bama.ua.edu/archives/ibm-main.html

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to [email protected] with the message: GET IBM-MAIN INFO
Search the archives at http://bama.ua.edu/archives/ibm-main.html

Reply via email to