Laut Oracle-Dokumentation:
So sehe ich das:
- Bei
Precision
größer als Scale ist (z. B.NUMBER(8,5)
), kein Problem, das geht ganz einfach.Precision
bedeutet, dass die Zahl insgesamt 8 Ziffern hat, von denen 5 im Bruchteil (.→) stehen, sodass der ganzzahlige Teil (←.) 3 Ziffern hat. Das ist ganz einfach. -
Wenn Sie diese
Precision
sehen ist kleiner alsScale
(zBNUMBER(2, 5)
), das bedeutet 3 Dinge :- Die Zahl hat keinen ganzzahligen Teil, sondern nur einen Bruchteil. Die 0 im ganzzahligen Teil wird also bei den Berechnungen nicht mitgezählt, Sie sagen 0,12345, nicht 0,12345. Wenn Sie nur 1 Ziffer im ganzzahligen Teil angeben, wird immer ein Fehler zurückgegeben.
- Die
Scale
stellt die Gesamtzahl der Ziffern im Bruchteil dar, die die Zahl haben wird. 5 in diesem Fall. Es kann also .12345 oder .00098 sein, aber insgesamt nicht mehr als 5 Ziffern. - Der Bruchteil wird in 2 Teile unterteilt, signifikante Zahlen und Nullen. Signifikante Zahlen werden durch
Precision
angegeben , und die Mindestanzahl an Nullen ist gleich (Scale
-Precision
). Beispiel:
hier Die Zahl muss mindestens 3 Nullen im Bruchteil haben. gefolgt von 2 signifikanten Zahlen (kann auch eine Null haben). Also 3 Nullen + 2 signifikante Zahlen =5, was die
Scale
ist Nummer.
Kurz gesagt, wenn Sie zum Beispiel NUMBER(6,9)
sehen , das sagt uns, dass der Bruchteil insgesamt 9 Ziffern haben wird, beginnend mit obligatorischen 3 Nullen und gefolgt von 6 Ziffern.
Hier sind einige Beispiele:
SELECT CAST(.0000123 AS NUMBER(6,9)) FROM dual; -- prints: 0.0000123; .000|012300
SELECT CAST(.000012345 AS NUMBER(6,9)) FROM dual; -- prints: 0.0000123; .000|012345
SELECT CAST(.123456 AS NUMBER(3,4)) FROM dual; -- ERROR! must have a 1 zero (4-3=1)
SELECT CAST(.013579 AS NUMBER(3,4)) FROM dual; -- prints: 0.0136; max 4 digits, .013579 rounded to .0136