Pregunta

Tuve un problema en mi base de datos aquí, uso Firebird 1.5.3 y funciona bien hasta que noe para leer o escribir de manera normal, pero cuando ejecuto un procedimiento, obtuve el resultado de la fila en blanco y el siguiente mensaje:

Excepción aritmética, desbordamiento numérico o truncamiento de cuerdas.

Código SQL: -802 Número de error IB: 335544321

Así que lo compro con mi DB de respaldo hace un mes, funcionó bien, obtengo datos en filas. Para asegurar que mi código no cambie, copio ambos procedimientos en WinMerge (comparador Diff) pero nada diferente. Para asegurar que mi error provenga de los datos, ejecuto mi procedimiento para transacciones anticuadas (datos de 1 año), todavía recibo ese mensaje.

Reviso la lógica aritmética en el procedimiento, modificando, pero no hay suerte. ¿Alguien puede ayudar con esto?

Gracias un montón,

¿Fue útil?

Solución

Después de un largo rastreo en el código y los datos, encontré el obstáculo que de alguna manera me molestó. Hubo un cambio en los datos maestros que ahora tiene carácter de Longger (VARCHAR). En mi procedimiento se puso en un tamaño más pequeño de Varchar, digamos 10 caracteres. Mientras que la nueva cadena es aproximadamente 15. Aquí va el error ... o truncamiento de cadena ..... Pero de todos modos, gracias a su atención a mi problema y gracias por las pistas que escribiste, me salvó de alguna manera, dame la idea de rastrearlo.

Gracias un montón,

Otros consejos

Diferente comportamiento (en Backup DB y Live One) con exactamente los mismos datos es extraño. Quizás algún otro procedimiento o disparador está arruinando su consulta en el DB en vivo.

Como dice que no puede publicar el código aquí, sugeriré algo que pueda intentar eliminar otras posibilidades.

"Desbordamiento numérico o truncamiento de cadenas". es el error que recibes.

  • ¿Tiene la consulta? SUM() u otra función de agegate?
  • ¿Tiene alguna función de manipulación de cadenas?

En caso afirmativo en cualquiera de los anteriores, intente eliminar dicha parte, una por una, y ejecute la consulta modificada. Por lo tanto, puede detectar qué parte de la consulta produce el error.


Nota: La misma estructura de DB, los mismos datos y la misma consulta lo hacen no siempre produce los mismos resultados debido a funciones no deterministas como NOW() y RAND(). Si los resultados de estas funciones se utilizan en cálculos adicionales, entonces los errores aritméticos como la división por 0 o desbordamiento u otros tipos de errores pueden ocurrir en una ejecución y no en otra.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top