Q. I have programs that sometimes force a field defined larger than the result field. Of course I get the RNQ0103 message (“Target for a numeric operation is too small to hold result”). Is there a work-around or am I forced to end-free and do this operation and return to free?
A. This problem will occur with the EVAL operation, regardless of whether or not you are using free format RPG.
You could use the Monitor operation to watch for this error, which RPG can catch as a status code of 103:
D Tgttoosmall C 103 D Result S 11 2 D Source S 15 2 /Free Monitor; Result = Source; On-error Tgttoosmall; ... // Process exception here ... Endmon; /End-free
In this example, if the value of Source is too large to fit into Result, the On-error statement will catch the error. I’ve used a named constant to hold the relevant status code, 103. Following the On-error statement, you can include whatever code you want to handle the exception.