Cuando en una tabla se declara una columna para que sea de tipo NUMERIC o de tipo DECIMAL es muy frecuente que se la declare mal. El error les ocurre más frecuentemente a los desarrolladores que están acostumbrados a usar los lenguajes xBase (dBase, Clipper, FoxPro, etc.)

¿Por qué?

Porque en los xBase si se declara a una columna como:

NUMERIC (5, 3)

eso significa que en esa columnas se guardarán 5 caracteres:

1 dígito en la parte entera

1 punto decimal

3 dígitos en la parte decimal

O sea que el primer número (el 5 en nuestro ejemplo) indica la cantidad total de caracteres incluyendo el punto decimal; y el segundo número (el 3 en nuestro ejemplo) indica la cantidad de decimales. Pero en SQL en general y en Firebird en particular: no se hace así.

Para conocer la forma en que se almacenan las columnas de tipo NUMERIC o DECIMAL en Firebird puedes leer estos dos artículos:

Entendiendo NUMERIC y DECIMAL

Usando NUMERIC y DECIMAL

Veamos algunos ejemplos, si declaramos a una columna como:

NUMERIC(5, 3)

En xBase el máximo valor posible es 9.999; en SQL es 99999.999

NUMERIC(6, 2)

En xBase el máximo valor posible es 999.99; en SQL es 999999.99

NUMERIC(7, 5)

En xBase el máximo valor posible es 9.99999; en SQL es 9999.99999

NUMERIC(10, 6)

En xBase el máximo valor posible es 999.999999; en SQL es 999999999.999999

La forma en que se declaran las columnas de tipo NUMERIC en los xBase es sin duda más fácil de comprender y de recordar, pero en Firebird se hace de otra manera y por supuesto es a la manera de Firebird la que debemos usar cuando declaramos una columna en Firebird.

Si recuerdas como se almacenan internamente las columnas NUMERIC y DECIMAL en Firebird entonces te resultará bastante fácil hallar el valor máximo que puedes almacenar en esas columnas. Si tienes dudas, puedes consultar los dos artículos cuyos enlaces encontrarás más arriba.

Artículos relacionados

Entendiendo NUMERIC y DECIMAL

Usando NUMERIC y DECIMAL

Determinando la precisión y la escala de una columna NUMERIC

El índice del blog Firebird21

 El foro del blog Firebird21