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: NÚMERO (10)

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!

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top