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
