Como posso saber se 10385274000 encaixa em: NÚMERO (10) para o Oracle?
Pergunta
I trabalhado toda a semana para solucionou um erro de produção.
Eu finalmente tenho o ponto onde eu posso encontrar o registro culpado que está causando toda a confusão.
Eu tenho a seguinte mensagem de erro:
java.sql.SQLException: [BEA][Oracle JDBC Driver][Oracle]ORA-01438: value larger than specified precision allows for this column
Eventuall de toda a informação que eu acho que isso pode ser os dados errados, o sistema está tentando inserir:
10385274000
em um número (10)
Como posso saber se isso se encaixa valor ou não?
Obrigado
Editar
De acordo com Michel Todd sugestão:
create table xyz( testfield number( 10 ) );
insert into xyz values( 10385274000 )
Error: ORA-01438: value larger than specified precision allowed for this column
Obrigado pessoal !!!
Obrigado stackoverflow
Editar
Notas para a minha auto (não esquecer o que era o problema)
Eu tive esse produto da Oracle que armazena em um banco de dados tabela o tempo de um evento
START_TIME|END_TIME
Acontece everynight que backups esta informação em outra mesa, mas realiza uma trnsformation no processo. Ele faz loja como:
TOTALTIME
O problema surge quando esse campo é calculado subtraindo ENDTIME - STARTTIME. O número resultante é armazenada nesta coluna a qual é definida como:
Bem, acontece que se END_TIME-START_TIME estão muito longe no tempo (cerca de 4 meses ou mais) o valor (em milissegundos) seria tão grande que não vai caber na coluna de destino (eu acho que ele tem algo como endTime.getTime () - startTime.getTime () dentro do código)
Tudo isso soa muito fácil e muito bobo agora, mas ele me levou quatro dias + para descobrir, porque uma vez que esta é uma aplicação fechada Eu não tinha a menor idéia do que estava acontecendo, a única coisa que eu tenho foi o stacktrace.
Eu tive que fazer engenharia reversa (no velho sentido da palavra, com a mão e, obviamente, com a origem) todo o processo de descobrir isso.
Quando eu fiz isso, eu tenho o mesmo erro no meu "migrador codificado mão" e descobrir como resolvê-lo!
Solução
O número 10 em NÚMERO (10) especifica o tamanho do campo. Isso significa que o campo pode conter um número de até 10 caracteres. O seu número tem 11 dígitos e, portanto, o valor é grande para caber. Qualquer coisa menor que (<) de 10 mil milhões (10 000 000 000) pode ser inserido sem problemas. Isso é o que você precisa para verificar se você deseja validar o valor antes de inserir.