Pregunta

He estado trabajando toda la semana para solucionar un error de producción.

Finalmente llegué al punto en el que puedo encontrar el registro del culpable que está causando todo el desorden.

Tengo el siguiente mensaje de error:

java.sql.SQLException: [BEA][Oracle JDBC Driver][Oracle]ORA-01438: value larger than specified precision allows for this column

Eventualmente a partir de toda la información, creo que estos podrían ser datos incorrectos, el sistema está intentando insertar:

10385274000

En un NÚMERO (10)

¿Cómo puedo saber si ese valor encaja o no?

Gracias

EDIT

Según la sugerencia de Michel Todd:

create table xyz( testfield number( 10 ) );

insert into xyz values( 10385274000 )


Error: ORA-01438: value larger than specified precision allowed for this column

¡Gracias chicos!

Gracias stackoverflow

EDIT

Notas para mí mismo (sin olvidar cuál fue el problema)

Tenía este producto Oracle que almacena en una tabla de base de datos la hora de un evento

START_TIME|END_TIME

Resulta que cada noche hace una copia de seguridad de esta información en otra tabla pero realiza una transformación en el proceso. Se almacena como:

TOTALTIME

El problema surge cuando este campo se calcula restando ENDTIME - STARTTIME. El número resultante se almacena en esta columna que se define como: NUMBER(10)

Bueno, resulta que si END_TIME-START_TIME está demasiado lejos en el tiempo (aproximadamente 4 meses más o menos) el valor (en milisegundos) sería TAN grande que no cabe en la columna de destino (supongo que tiene algo como endTime.getTime () - startTime.getTime () dentro del código)

Todo esto suena demasiado fácil y demasiado tonto ahora, pero tardé más de 4 días en descubrirlo, porque como se trata de una aplicación cerrada no tenía ni idea de lo que estaba sucediendo, lo único que tuve fue El stacktrace.

Tuve que realizar ingeniería inversa (en el sentido ANTIGUO de la palabra, a mano y obviamente sin la fuente) todo el proceso para descubrirlo.

Cuando lo hice, obtuve el mismo error en mi & "; migrador codificado a mano &"; ¡y descubra cómo resolverlo!

¿Fue útil?

Solución

El número 10 en NUMBER (10) especifica el tamaño del campo. Eso significa que el campo puede contener un número de hasta 10 caracteres. Su número tiene 11 dígitos y, por lo tanto, el valor es demasiado grande para caber. Cualquier cosa menor que (& Lt;) 10 mil millones (10 000 000 000) se puede insertar sin problemas. Eso es lo que debe verificar si desea validar el valor antes de insertarlo.

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