Ver Mensaje Individual
  #6  
Antiguo 06-07-2003
Avatar de mlara
[mlara] mlara is offline
Miembro Premium
 
Registrado: jun 2003
Ubicación: Colombia
Posts: 667
Reputación: 24
mlara Va por buen camino
No era necesaria la tabla. Veamos el siguiente SP:

Código:
ALTER PROCEDURE "EvalExpr"
  RETURNS(
  out_expr VARCHAR(256))

AS

DECLARE VARIABLE i DECIMAL(18, 4);
DECLARE VARIABLE expr VARCHAR(256);
DECLARE VARIABLE segexpr VARCHAR(32);

BEGIN

  expr = '';

  i = 0;
  WHILE (i < 34) DO BEGIN

    segexpr = CAST(i AS VARCHAR(32));
    expr = expr || segexpr;

    segexpr = '+';
    expr = expr || segexpr;

    i = i+1;
  END

  out_expr = expr;

  SUSPEND;
END
En este procedimiento se produce el mismo error cuando se cuenta hasta i < 34. Si se suenta hasta i < 33 no hay error.

Claro, la variable i es decimal(18, 4) y tiene como mínimo 6 caracteres al ser convertida a varchar, así si i = 0 tenemos que cast(i as varchar(32)) = '0.0000'. cuando se cuenta hasta i < 33 se tienen exactamente 254 caracteres, valor justo por debajo del
tamaño de la variable expr.

Sucede que cuando un procedimiento tiene mucho más código, como InterBase no retorna el punto exacto donde está el error, pues la depuración es ardua y engorrosa, pero ahí vamos.
__________________
...y mañana caminaré por las calles pasando inadvertido, como siempre.
Responder Con Cita