Kbase P124666: Error 1410 with Temp Table used as OUTPUT parameter and defined as NEW SHARED (BREAK BY scenario).
Autor |
  Progress Software Corporation - Progress |
Acesso |
  Público |
Publicação |
  17/12/2008 |
|
Status: Unverified
FACT(s) (Environment):
OpenEdge 10.1B
All Supported Operating Systems
SYMPTOM(s):
Error 1410 running an ABL application:
Error code <number> returned from fdfnd. (1410)
Error code -20011 returned from fdfnd. (1410)
Error 1410 occurs upon return from a specific procedure.
In that procedure, a TEMP-TABLE is defined as OUTPUT parameter.
In that procedure, the same TEMP-TABLE is defined as NEW SHARED.
FOR EACH is used against the TEMP-TABLE with the BREAK BY option.
The BREAK BY option uses fields from the TEMP-TABLE.
The error cannot be reproduced in versions of OpenEdge prior to 10.1B.
CAUSE:
This is a known issue.
The cause is in the combination of the TEMP-TABLE being defined as NEW SHARED, being used as an OUTPUT parameter, and using a BREAK BY on one of more fields of the TEMP-TABLE.
Under these circumstances, OpenEdge fails to clean up the implicit buffer created by BREAK BY, and results in this error message. The following code exemplifies the problem:
/* main.p */
DEFINE TEMP-TABLE t_temp
FIELD x_name AS CHAR.
RUN temp.p (OUTPUT TABLE t_temp).
/* temp.p */
DEFINE NEW SHARED TEMP-TABLE t_temp
FIELD x_name AS CHARACTER.
DEFINE OUTPUT PARAMETER TABLE FOR t_temp.
FOR EACH t_temp BREAK BY t_temp.x_name:
END.
Error 1410 occurs upon return from temp.p to main.p, when the buffers allocated for t_temp should be cleaned up.
The problem was introduced in 10.1B; earlier versions of OpenEdge do not exhibit this issue.
FIX:
To work around the problem:
1. Redefine the TEMP-TABLE as not NEW SHARED.
2. Remove the BREAK BY clause from the FOR EACH.