Question

J'ai travaillé toute la semaine pour résoudre une erreur de production.

J'ai finalement eu le point de trouver le dossier du coupable qui cause tout le bazar.

J'ai le message d'erreur suivant:

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

Eventuellement, d'après toutes les informations, je pense que cela pourrait être une mauvaise donnée, le système tente d'insérer:

10385274000

En NOMBRE (10)

Comment savoir si cette valeur correspond ou non?

Merci

MODIFIER

Selon la suggestion 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

Merci les gars !!!

Merci stackoverflow

MODIFIER

Notes personnelles (ne pas oublier quel était le problème)

J'ai eu ce produit Oracle qui stocke dans une table de base de données l'heure d'un événement

START_TIME|END_TIME

Il s'avère que toutes les nuits, il sauvegarde ces informations dans une autre table mais effectue une transformation dans le processus. Il stocke comme:

TOTALTIME

Le problème survient lorsque ce champ est calculé en soustrayant ENDTIME - STARTTIME. Le numéro obtenu est stocké dans cette colonne, définie comme suit: NUMBER (10)

Eh bien, si END_TIME-START_TIME était trop éloigné dans le temps (environ 4 mois environ), la valeur (en millisecondes) serait si grande qu'elle ne rentrera pas dans la colonne cible (je suppose qu'elle a quelque chose comme endTime.getTime () - startTime.getTime () dans le code)

Tout cela semble trop facile et trop bête maintenant, mais il m'a fallu plus de 4 jours pour le savoir, car comme il s'agit d'une application fermée, je n'avais aucune idée de ce qui se passait, la seule chose que j'ai le stacktrace.

J'ai dû faire de l'ingénierie inverse (au sens ancien du terme, à la main et évidemment sans la source) de tout le processus pour le découvrir.

Quand je l'ai fait, j'ai la même erreur dans mon " émetteur codé à la main " et découvrez comment le résoudre!

Était-ce utile?

La solution

Le nombre 10 dans NUMBER (10) spécifie la taille du champ. Cela signifie que le champ peut contenir un nombre pouvant aller jusqu'à 10 caractères. Votre numéro a 11 chiffres et la valeur est donc trop grande pour tenir. Tout ce qui est inférieur à (& Lt;) 10 milliards (10 000 000 000) peut être inséré sans problème. C’est ce que vous devez vérifier si vous souhaitez valider la valeur avant de l’insérer.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top