Quotes & Blanks in JCL Symbolic Variables
Symbolic substitution in JCL can be a minefield when embedded blanks or
quotes are involved. The JCL conversion process
- will not substitute symbolics inside quotes
- will stop subsitution when it hits a blank outside of quotes
- requires two quotes within a quoted string to represent a
Here is a relatively straight-forward example of how to deal
with this situation. Say that you want to run SDSF in batch and limit the
jobs selected to only those associated with the user who owns the batch
job. Here is some JCL that you could use:
// SET QT=''''
// SET CMD='OWNER '
// SET PRM=&QT.&CMD.&SYSUID.&QT
//GETMSGS EXEC PGM=SDSF,DYNAMNBR=32,REGION=1024K,TIME=5,
//REPORT DD DISP=(,CATLG),DSN=&SYSUID..ABC.LIST,
//ISFOUT DD SYSOUT=*
//ISFIN DD *
PRINT FILE REPORT
... more SDSF control statements ...
&SYSUID is a standard JCL symbolic which contains the userid associated
with the executing job. Refer to an earlier stupid
trick for more information. The PARM string 'OWNER userid' tells SDSF
to only look at jobs belonging to userid.
We construct the parm by combining constant strings (which may contain
blanks) with symbolic variables and frame the resulting string using the
symbolic variable &QT (one single quote) to glue it all together.
The symbolic variable PRM contains 'OWNER userid'; however, if you
don't put the &QTs around it as in the sample above, you wind up with
just PARM=OWNER being passed to SDSF.
Here is a more complex example. Caution-overexposure to this topic
may cause discomfort:
//NESTED PROC LS=132,
// SET QT=''''
//SAUS EXEC SAUS,
//SYSIN DD DISP=(OLD,DELETE),DSN=&&SASIN
//RUNJCL EXEC NESTED
The instream procedure NESTED invokes a catalogued procedure SAUS. The
intent is to assign the value 'SYSPARM=''132-60''' to symbolic parameter
OPTIONS. OPTIONS is appended to the execution parm in the invoked catalogued
procedure, (which is contained within quotes), resulting in the value
SYSPARM='132-60' being included in the run-time parms for program SAUS,
once all the extra quotes have been stripped away. The values 132 and 60
are being used as default line size and page size values by the application.
They can be modified in the JCL which makes use of the instream procedure.
Comments or suggestions can be
sent to the author.
Last Month's Topic