z/OS message

IEF642I: Excessive parameter length

IEF642I EXCESSIVE PARAMETER LENGTH IN THE xxx FIELD means a value on a JCL statement is longer than z/OS allows for that parameter, and the job doesn't run. The field name in the message tells you which one. PARM, with its 100-character limit, is the most common.

Other names for this code

Also written as IEF642, EXCESSIVE PARAMETER LENGTH IN THE PARM FIELD, EXCESSIVE PARAMETER LENGTH IN THE SYSOUT FIELD, IEF642I excessive parameter length, JCL PARM too long.

What it means

When a job is submitted, z/OS checks each parameter in its JCL against the rules for that parameter. Many parameters have a maximum length. If a value is longer, the system writes IEF642I with the name of the field, such as PARM or SYSOUT. The job isn't run, and the job log shows JOB NOT RUN - JCL ERROR.

The message appears in the job's system messages (JESYSMSG) under the heading STMT NO. MESSAGE. The number on the left is the JCL statement number, which you can match to JESJCL.

The PARM parameter on an EXEC statement is the usual cause. It passes a string to the program, and that string can be at most 100 characters. Commas inside the string count toward the limit. The apostrophes or parentheses that enclose the whole value don't. Jobs that pass a long list of options in PARM hit this limit often, and IBM and other vendors have shipped fixes that move options out of PARM into a DD statement for that reason.

SYSOUT is the other field people often see. The first part of SYSOUT is the output class, a single letter or digit, or an asterisk for the job's message class. A name such as SYSOUT=JES2 is too long for a class, so it gets IEF642I for the SYSOUT field.

Since z/OS 2.1 the EXEC statement also accepts PARMDD. It names a DD statement that holds the parameter string, which can be up to 32,760 bytes. That is the standard way round the 100-character limit when a program needs a long parameter.

Common causes

  • A PARM string longer than 100 characters, often after options were added to it over time.
  • A symbolic parameter that resolves to a longer value than the JCL author expected, so the PARM looks short in the source but is too long after substitution.
  • A job generated by a product or tool that builds the PARM from panel choices. Some combinations of options push it past 100 characters.
  • A SYSOUT class longer than one character, such as SYSOUT=JES2 or SYSOUT=AB.

How to find the problem

  1. Open JESYSMSG in SDSF. Under STMT NO. MESSAGE, note the statement number and the field named in IEF642I.
  2. Open JESJCL and find that statement number. If the statement uses symbols, read the IEFC653I SUBSTITUTION JCL line under it, which shows the value after substitution. Count that value, not the original.
  3. For PARM, count every character between the enclosing apostrophes or parentheses, including commas and blanks inside them. In ISPF edit, the COLS line command puts a ruler over the line to help.

How to fix it

  • Shorten the PARM. Remove options that are already the program's defaults, or use shorter forms if the program accepts them.
  • Move options into a control data set if the program reads one. Many products take most of their options from a DD statement and need only a few in PARM.
  • On z/OS 2.1 and later, code PARMDD=PARMIN on the EXEC statement instead of PARM, and put the string in the data set or in-stream data for //PARMIN DD. Check first that the program can handle a parameter longer than 100 characters.
  • For SYSOUT, code a valid one-character class, such as SYSOUT=* for the job's message class or SYSOUT=A.
  • Resubmit the job. Nothing ran, so there is nothing to clean up.

What it looks like

 STMT NO. MESSAGE
        4 IEF642I EXCESSIVE PARAMETER LENGTH IN THE PARM FIELD

IBM documentation

IBM documentation: IEF642I. Use the documentation for your installed release.

Report a correction to WND Software.

Questions

What is the maximum length of PARM in JCL?

100 characters, not counting the apostrophes or parentheses around the whole value. For a longer string use PARMDD, available since z/OS 2.1, which reads up to 32,760 bytes from a data set.

Why does SYSOUT=JES2 give IEF642I?

The output class is a single character. Use SYSOUT=* to send the output to the job's message class on the JES spool.

Did any step run?

No. The error is found when the JCL is checked, before the first step starts. Fix the statement and resubmit the whole job.