IGZ0063S: Invalid sign in a numeric-edited sending field
IGZ0063S means a COBOL MOVE tried to turn a numeric-edited field back into a number, and the sign position of that field held a character its picture doesn't allow. The runtime ends the program and gives the program name and line number of the MOVE.
Other names for this code
Also written as IGZ0063, IGZ063S, IGZ0063S invalid sign, invalid sign numeric edited sending field, COBOL de-editing MOVE error, IGZ0063S U4038.
What it means
A numeric-edited field holds a number formatted for printing, with a picture such as -ZZZ,ZZ9.99 or 9(13)V99-. COBOL lets a program move such a field back to a plain numeric field. This is called de-editing. The runtime reads the digits and the sign out of the edited text and builds the number.
The sign has to match the picture. A field defined with a trailing minus can hold a minus or a space in that position. A field defined with a plus sign expects a plus or a minus. If the sign position holds something else, such as a space where the picture needs a plus or minus, or a plus where only a minus is allowed, the runtime can't tell what the sign should be. It writes IGZ0063S with the program name and the line number, and ends the program. Under Language Environment the step usually ends with U4038.
The check depends on the compiler release. IBM APAR PI63292 says Enterprise COBOL 6.1 at first checked the sign even when the sending and receiving fields weren't both signed, which COBOL 4.2 didn't do. The fix made 6.1 check the sign only when both fields are signed. The fix is in the compiler, so a program that got IGZ0063S right after moving to COBOL 6.1 may need to be recompiled once the PTF is on.
Common causes
- The edited field was never filled, so it still holds spaces or low-values when the program moves it to a signed numeric field.
- The data came from another system or report with a different sign convention, such as a plus sign in a field whose picture only allows a trailing minus.
- The writing program and the reading program use different pictures for the same field, often because one copybook changed.
- On Enterprise COBOL 6.1 before the PTF for APAR PI63292, a MOVE between fields that weren't both signed was checked when it shouldn't have been.
How to find the problem
- Find IGZ0063S in the step's SYSOUT and go to the line number it gives in the compile listing. It will be a MOVE (or a statement that does an implicit move) from a numeric-edited field.
- Note the picture of the sending field and of the receiving field, and whether each one is signed.
- Display the sending field's contents in hex just before the MOVE, or look at it in a CEEDUMP or debugger. Check the character in the sign position against the picture.
- Trace where the sending field was last filled, whether from an input record or from earlier logic.
How to fix it
- Correct the data so its sign matches the picture, or change the picture so it matches the data. IBM gives this as the local fix in APAR PI63292.
- Make sure the edited field is filled before it is moved. Give it a starting value if it can be used before it is set.
- For text from outside the program, consider
FUNCTION NUMVALorFUNCTION NUMVAL-Cinstead of a de-editing MOVE. They accept a sign in more than one form. - If you are on Enterprise COBOL 6.1, check that the PTF for APAR PI63292 is installed on the compiler, then recompile the program.
What it looks like
IGZ0063S An invalid sign was detected in a numeric edited sending field in PAYPRT on line number 000318. IEF450I PAYRUN01 STEP040 - ABEND=S000 U4038 REASON=00000001
IBM documentation
IBM z/OS documentation. Use the documentation for your installed release.
This link opens the relevant IBM reference library or lookup instructions. Match the complete code and your installed product release; it is not a code-specific review.
Related codes
Questions
Is IGZ0063S the same as an S0C7?
No. An S0C7 is a hardware data exception on a packed or zoned field. IGZ0063S is a check the COBOL runtime makes when it converts an edited field back to a number.
Why did IGZ0063S start after moving to COBOL 6.1?
Early 6.1 levels checked the sign in moves where COBOL 4.2 didn't. APAR PI63292 fixed this so the sign is checked only when both fields are signed.
What is a de-editing MOVE?
It is a MOVE from a numeric-edited field to a numeric field. COBOL strips out the editing characters and rebuilds the number.