Si ves el mensaje: “Arithmetic overflow or division by zero has occurred. Arithmetic exception, numeric overflow, or string truncation. String right truncation”

¿Qué significa?

Que el Firebird encontró un error grave y por eso detuvo el procesamiento. Ese error grave pudo ser debido a un error matemático (por ejemplo, división por cero), a un sobreflujo (se quiso guardar en una columna numérica un número mayor al máximo permitido), o un error de cadena (se quiso guardar en una columna una cadena de mayor longitud que la definida).

La última frase: “String right truncation” nos da la pista de cual de esos errores fue detectado. En este caso, se quiso guardar una cadena de mayor longitud que la definida.

Esto puede ocurrir en dos ocasiones típicas:

  1. Al querer hacer un INSERT o un UPDATE a una columna
  2. Al querer hacer un SELECT a una vista cuya tabla ha cambiado su estructura

Caso 1. Al querer hacer un INSERT o un UPDATE a una columna

La columna por ejemplo está definida como VARCHAR(30) y queremos guardar en ella más de 30 caracteres

¿Solución? Aumentar el ancho que la columna tiene en la tabla o disminuir la cantidad de caracteres a guardar en la columna

Caso 2. Al querer hacer un SELECT a una vista cuya tabla ha cambiado su estructura

La columna por ejemplo está definida como VARCHAR(30), creamos una vista que usa esa columna, luego modificamos la columna a VARCHAR(40), al hacer SELECT de la vista obtenemos el error. ¿Por qué? porque la vista es un SELECT compilado y se compiló cuando la columna estaba definida como VARCHAR(30), eso es lo que conoce la Base de Datos. Si más tarde cambiamos la longitud de la columna a 40 la vista no está enterada de ese cambio, detecta una inconsistencia y muestra el error.

¿Solución?

Volver a compilar la vista. Al recompilar la vista, ésta ya usará la nueva longitud.

Para que el cambio tenga efecto deberás desconectarte de la Base de Datos y volver a conectarte.

Artículo relacionado:

El índice del blog Firebird21

 

Anuncios