Wie kann ich wissen, ob 10385274000 passt in: NUMBER (10) für Oracle?
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!
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.