The EXPORT statement makes JCL variables (system symbols) available to subsequent jobs within the same execution group. This enables job-to-job communication through shared variables, allowing later jobs to access values created in earlier jobs. The EXPORT statement is particularly useful in multi-job workflows where information needs to be passed along in a processing sequence.
Key Benefit:
EXPORT enables data sharing between related jobs, eliminating the need for intermediate datasets to pass simple values between job steps in a processing chain.
1// EXPORT SYMLIST=*
This form exports all defined system symbols to subsequent jobs.
1// EXPORT SYMLIST=(VAR1,VAR2,VAR3)
This form exports only the specified variables to subsequent jobs.
1// EXPORT SYMLIST=NONE
This form explicitly prevents any variables from being exported from this job.
123456789101112131415//JOB1 JOB (ACCT#),'ADMIN',CLASS=A // EXPORT SYMLIST=(TODAY,ENV,STATUS) // SET TODAY=&SYSDATE // SET ENV='PROD' // SET STATUS='NORMAL' //* //STEP1 EXEC PGM=PROGRAM1 //INPUT DD DSN=MY.INPUT.FILE,DISP=SHR //OUTPUT DD DSN=MY.OUTPUT.FILE,DISP=(,CATLG), // SPACE=(CYL,(10,5)),UNIT=SYSDA //* //JOB2 JOB (ACCT#),'ADMIN',CLASS=A //* This job can access TODAY, ENV, and STATUS from JOB1 //STEP1 EXEC PGM=PROGRAM2 //DD1 DD DSN=MY.&ENV..&TODAY..FILE,DISP=SHR
In this example, JOB1 exports three variables that JOB2 can then use. Note that JOB2 must be in the same execution group as JOB1.
1234567891011121314//JOB1 JOB (ACCT#),'ADMIN',CLASS=A // EXPORT SYMLIST=(RETURNCODE,COUNT) //STEP1 EXEC PGM=PROCESS //* Program sets RETURNCODE and COUNT values // SET RETURNCODE=&STEP1.RC // SET COUNT=100 //* //JOB2 JOB (ACCT#),'ADMIN',CLASS=A //* This job can access RETURNCODE and COUNT from JOB1 // IF &RETURNCODE = 0 THEN //STEP1 EXEC PGM=NORMAL // ELSE //STEP1 EXEC PGM=RECOVERY // ENDIF
This example shows how a second job can make processing decisions based on the outcome of the first job.
12345678910111213141516171819202122//EXTRACT JOB (ACCT#),'ADMIN',CLASS=A // EXPORT SYMLIST=(ROWCOUNT,FILEDATE) //STEP1 EXEC PGM=EXTRACT //* After extract, SET variables based on execution // SET ROWCOUNT=1000 // SET FILEDATE=&SYSDATE //* //PROCESS JOB (ACCT#),'ADMIN',CLASS=A // EXPORT SYMLIST=(ROWCOUNT,FILEDATE,PROCSTAT) //* Use values from prior job //STEP1 EXEC PGM=PROCESS,PARM='ROWS=&ROWCOUNT' // SET PROCSTAT='COMPLETED' //* //REPORT JOB (ACCT#),'ADMIN',CLASS=A //* Use values from both prior jobs //STEP1 EXEC PGM=REPORT //SYSOUT DD SYSOUT=A //SYSIN DD * REPORT FOR DATA PROCESSED ON &FILEDATE ROWS PROCESSED: &ROWCOUNT PROCESSING STATUS: &PROCSTAT /*
This example demonstrates a three-job pipeline where information flows through the jobs.
1234567891011//CREATE JOB (ACCT#),'ADMIN',CLASS=A // EXPORT SYMLIST=(DSNAME,DSSIZE) //STEP1 EXEC PGM=CREATE // SET DSNAME='MY.NEW.DATASET' // SET DSSIZE=50 //* //BACKUP JOB (ACCT#),'ADMIN',CLASS=A //STEP1 EXEC PGM=BACKUP //INPUT DD DSN=&DSNAME,DISP=SHR //OUTPUT DD DSN=BACKUP.&DSNAME,DISP=(NEW,CATLG), // SPACE=(CYL,(&DSSIZE,10)),UNIT=SYSDA
Here, the BACKUP job uses the dataset name and size determined by the CREATE job.
Issue | Possible Causes | Solutions |
---|---|---|
Variables not available in subsequent job |
|
|
JCL error on EXPORT statement |
|
|
Inconsistent variable values |
|
|
MSGLEVEL=(1,1)
to see expanded JCL with resolved variables