¿Cómo puedo saber si 10385274000 se ajusta a: NÚMERO (10) para Oracle?
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!
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.