Actually, it makes sense to me, in a strange way.
I don't know if I can describe why it makes sense, but I will try.

1) An // EXEC card is read and a 'step' begins. The // EXEC card itself must be interpreted. 2) The rest of the step 'stuff' (until the next // EXEC) is read in to the pre-processor. 3) The pre-processor first handles things that don't require read-ahead processing to the end of the step. 4) The pre-processor next handles things that did require read-ahead processing, such as "//PARMDD DD *,SYMBOLS=JCLONLY" that it could not process on the first pass.

Now, why it worked without PARMDD is because the '// EXEC' is processed and intrepreted before all the "let's get the step stuff now" logic (step 2 above).

Like I say, hard to describe.

Tony Thigpen

Windt, W.K.F. van der (Fred) wrote on 3/30/20 7:50 AM:
Based on the doc I expected these two JCL variations to behave 100% equivalent 
(assuming the program van handle any parameter length):

//STEP1  EXEC PGM=program,PARM='parameter with symbols'

And

//STEP1  EXEC PGM=program,PARM=PARMDD
//PARMDD DD *,SYMBOLS=JCLONLY
parameter with symbols
/*
But unexpected stuff happens when you add SET statements between job steps.

//           SET VRB=VALUE1
//STEP1  EXEC PGM=program,PARM='&VRB'
//*
//           SET VRB=VALUE2
//STEP2  EXEC PGM=program,PARM='&VRB'
//*
//           SET VRB=VALUE3
//STEP3  EXEC PGM=program,PARM='&VRB'

Behaves as expected. In STEP1 the program in invoked with parameter VALUE1, in 
STEP2 with parameter VALUE2 and in STEP3 with parameter VALUE3.

If I change the JCL to this:

//           SET VRB=VALUE1
//STEP1  EXEC PGM=program,PARM=PARMDD
//PARMDD  DD *,SYMBOLS=JCLONLY
&VRB
/*
//*
//           SET VRB=VALUE2
//STEP2  EXEC PGM=program,PARM=PARMDD
//PARMDD  DD *,SYMBOLS=JCLONLY
&VRB
/*
//*
//           SET VRB=VALUE3
//STEP3  EXEC PGM=program,PARM=PARMDD
//PARMDD  DD *,SYMBOLS=JCLONLY
&VRB
/*

Does not behave 'logical' at all. In STEP1 the program is invoked with 
parameter VALUE2, in STEP2 and STEP3 with parameter VALUE3. It seems SET 
statement that follow the current EXEC statement (but before the next EXEC 
statement) are processed before the PARMDD= parameter is constructed.

I can't find any documentation that specifies this behavior. Is this a bug?

Regardz,

Fred!

-----------------------------------------------------------------
ATTENTION:
The information in this e-mail is confidential and only meant for the intended 
recipient. If you are not the intended recipient, don't use or disclose it in 
any way. Please let the sender know and delete the message immediately.
-----------------------------------------------------------------

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to [email protected] with the message: INFO IBM-MAIN



----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to [email protected] with the message: INFO IBM-MAIN

Reply via email to