Wie kann ich wissen, ob 10385274000 passt in: - ANZAHL(10) für Oracle?
Ich arbeite die ganze Woche durch wie bei ein Produktion Fehler.
Habe ich endlich den Punkt, wo ich finden kann, der Täter-Datensatz die Ursache für die Sauerei.
Habe ich die folgende Fehlermeldung:
java.sql.SQLException: [BEA][Oracle JDBC Driver][Oracle]ORA-01438: value larger than specified precision allows for this column
Eventuall von allen die info, die ich denke, das könnte die falschen Daten, wird das system versuchen, einfügen:
10385274000
In eine ANZAHL(10)
Wie kann ich wissen, ob dieser Wert passt oder nicht?
Danke
BEARBEITEN
Als 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
Anmerkungen zu meinem "selbst" ( nicht zu vergessen, was war das problem )
Hatte ich das Oracle-Produkt speichert, in eine Datenbank-Tabelle die Zeit des Ereignisses
START_TIME|END_TIME
Es stellt sich heraus, everynight es sicherungen dieser Informationen in einer anderen Tabelle, sondern führt eine trnsformation in den Prozess. Es speichert wie:
TOTALTIME
Das problem kommt, wenn Sie dieses Feld ist berechnet durch Subtraktion ENDTIME - STARTTIME. Die resultierende Zahl in dieser Spalte gespeichert, die definiert ist als: ANZAHL(10)
Gut, es stellt sich heraus, wenn END_TIME-START_TIME sind zu weit Weg in der Zeit ( über 4 Monate oder so ) den Wert ( in Millisekunden ) wäre SO groß, es passt nicht in die Spalte Ziel ( ich denke, es hat so etwas wie Endzeit.getTime() - startTime.getTime() im code )
All dies klingt zu einfach und zu dumm jetzt, aber es hat mich 4 Tage+ finden, weil da, dadurch ist eine geschlossene Anwendung, die ich hatte keine Ahnung, was passiert war, das einzige was ich bekommen habe war der stacktrace.
Hatte ich zum reverse Engineering ( im ALTEN Sinne des Wortes, von hand und natürlich mit out-Quelle), die den gesamten Prozess, um dies herauszufinden.
Als ich es getan habe, ich habe den gleichen Fehler bei meiner "hand-coded migrator" und finden Sie heraus, wie es zu lösen!
Eine q&d, wie es zu tun ist, erstellen Sie eine temporäre Tabelle mit einer Zahl(10) und der Versuch, legen Sie diesen Wert. Wenn es funktioniert, das ist nicht das problem.
InformationsquelleAutor OscarRyz | 2009-08-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Zahl 10 in die ZAHL(10) gibt das Feld Größe. Das bedeutet, dass das Feld zu halten, kann eine Zahl bis zu 10 Zeichen lang sein. Ihre Nummer ist 11-stellig und somit ist der Wert zu groß, um zu passen. Alles was kleiner als (<) 10 Milliarden (10 000 000 000) eingefügt werden können, ohne Probleme. Das ist, was Sie brauchen, um zu überprüfen, wenn Sie wollen überprüfen Sie den Wert vor dem einfügen.
Eine schnelle Google gab diese Referenz Seite: techonthenet.com/oracle/datatypes.php
Die "10" in die Zahl(10) gibt die Gesamtzahl der Ziffern. Optional können Sie auch angeben, die Anzahl der Nachkommastellen. Zitat der link oben "Zum Beispiel, numeric(7,2) ist eine Zahl, die 5 Ziffern vor dem Dezimaltrennzeichen und 2 stellen nach dem Komma."
H-Warum nicht, alles was kleiner als (99 999 999 999)?
Denn 10 000 000 000 und bis zu 99 999 999 999 hat 11 Ziffern.
InformationsquelleAutor Emil H