Domanda

Ho lavorato tutta la settimana per risolvere un errore di produzione.

Alla fine ho ottenuto il punto in cui posso trovare la registrazione del colpevole che sta causando tutto il casino.

Ho il seguente messaggio di errore:

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

Eventuall da tutte le informazioni penso che potrebbero essere dati errati, il sistema sta cercando di inserire:

10385274000

Into a NUMBER (10)

Come posso sapere se quel valore si adatta o no?

Grazie

Modifica

Come suggerito da 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

Grazie ragazzi !!!

Grazie stackoverflow

Modifica

Note per me (per non dimenticare quale fosse il problema)

Avevo questo prodotto Oracle che memorizza in una tabella di database l'ora di un evento

START_TIME|END_TIME

Si scopre ogni notte che esegue il backup di queste informazioni in un'altra tabella ma esegue una trasformazione nel processo. Memorizza come:

TOTALTIME

Il problema si presenta quando questo campo viene calcolato sottraendo ENDTIME - STARTTIME. Il numero risultante è memorizzato in questa colonna che è definita come: NUMBER(10)

Bene, risulta che END_TIME-START_TIME sono troppo lontani nel tempo (circa 4 mesi o giù di lì) il valore (in millisecondi) sarebbe così grande che non si adatterà nella colonna target (immagino che abbia qualcosa come endTime.getTime () - startTime.getTime () all'interno del codice)

Tutto questo sembra troppo facile e troppo sciocco ora, ma mi ci sono voluti 4 giorni + per scoprirlo, perché poiché si tratta di un'applicazione chiusa non avevo idea di cosa stesse succedendo, l'unica cosa che ho avuto è stata lo stacktrace.

Ho dovuto decodificare (nel senso antico della parola, a mano e ovviamente senza la fonte) l'intero processo per scoprirlo.

Quando l'ho fatto, ho lo stesso errore nel mio " migratore codificato a mano " e scopri come risolverlo!

È stato utile?

Soluzione

Il numero 10 in NUMBER (10) specifica la dimensione del campo. Ciò significa che il campo può contenere un numero di massimo 10 caratteri. Il tuo numero ha 11 cifre e quindi il valore è troppo grande per adattarsi. Qualsiasi cosa di dimensioni inferiori a (& Lt;) 10 miliardi (10 000 000 000) può essere inserita senza problemi. Questo è ciò che devi verificare se vuoi convalidare il valore prima di inserirlo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top