Frage

Ich arbeite die ganze Woche einen Produktionsfehler zu Störungsbehebung.

Ich habe schließlich bekam die den Punkt, wo ich den Täter Datensatz finden, die alle das Chaos verursacht.

Ich habe die folgende Fehlermeldung bekommen:

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

Eventuall von allen Info denke ich, könnte dies die falschen Daten sein, wird das System versuchen, einzufügen:

10385274000

in einer Anzahl (10)

Wie kann ich wissen, ob dieser Wert passt oder nicht?

Danke

Bearbeiten

Wie pro Michel Todd Vorschlag:

create table xyz( testfield number( 10 ) );

insert into xyz values( 10385274000 )


Error: ORA-01438: value larger than specified precision allowed for this column

Danke Jungs !!!

Danke Stackoverflow

Bearbeiten

Hinweise zu mir selbst (nicht zu vergessen, was das Problem war)

Ich hatte dieses Oracle Produkt, das die Zeit eines Ereignisses in einer Datenbanktabelle speichert

START_TIME|END_TIME

Es stellt sich heraus, jeden Abend es diese Informationen in eine andere Tabelle Backups, sondern führt eine trnsformation in den Prozess. Es speichert wie:

TOTALTIME

Das Problem kommt, wenn dieser Bereich durch Subtrahieren ENDTIME berechnet wird - STARTTIME. Die resultierende Zahl wird in dieser Spalte gespeichert, die wie folgt definiert ist: NUMBER (10)

Nun, es stellt sich heraus, ob END_TIME-START_TIME in der Zeit zu weit entfernt ist (etwa 4 Monate oder so) den Wert (in Millisekunden) würde so groß sein, es nicht in der Zielspalte passen (ich denke, es hat so etwas wie endTime.getTime () - startTime.getTime () innerhalb des Code)

Das alles klingt zu einfach und zu dumm jetzt, aber es hat mich 4 Tage +, um herauszufinden, weil da dies eine geschlossene Anwendung ist habe ich keine Ahnung davon haben, was los war, das einzige, was ich habe, war die Stacktrace.

Ich hatte Reverse Engineering (im alten Sinne des Wortes, von Hand und natürlich mit aus der Quelle), um den gesamten Prozess, das herauszufinden.

Als ich es tat, habe ich den gleichen Fehler hätte in meinem „Hand codierte Migrator“ und herauszufinden, wie es zu lösen!

War es hilfreich?

Lösung

Die Zahl 10 in NUMBER (10) gibt die Feldgröße. Das bedeutet, dass das Feld lange eine Zahl bis zu 10 Zeichen enthalten kann. Ihre Zahl hat 11 Stellen und damit der Wert zu groß passen. Alles, was kleiner als (<) 10 Milliarden (10 000 000 000) kann ohne Probleme eingesetzt werden. Das ist, was Sie für überprüfen müssen, wenn Sie den Wert überprüfen, bevor das Einfügen mögen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top