Volgens Oracle-documentatie:
Zo zie ik het:
- Wanneer
Precisionis groter dan Schaal (bijv.NUMBER(8,5)), geen probleem, dit is eenvoudig.Precisionbetekent dat het getal in totaal 8 cijfers zal hebben, waarvan 5 in het fractionele deel (.→), dus het gehele deel (←.) zal 3 cijfers hebben. Dit is gemakkelijk. -
Als je die
Precision. ziet is kleiner danScale(bijv.NUMBER(2, 5)), betekent dit 3 dingen:- Het getal heeft geen geheel getal, alleen een breuk. Dus de 0 in het gehele deel wordt niet meegeteld in de berekeningen, je zegt .12345 en niet 0.12345. Als u slechts 1 cijfer opgeeft in het gehele getal, wordt er altijd een fout geretourneerd.
- De
Scalestaat voor het totale aantal cijfers in het fractionele deel dat het nummer zal hebben. 5 in dit geval. Het kan dus .12345 of .00098 zijn, maar in totaal niet meer dan 5 cijfers. - Het fractionele deel is verdeeld in 2 delen, significante getallen en nullen. Significante getallen worden gespecificeerd door
Precision, en het minimum aantal nullen is gelijk aan (Scale-Precision). Voorbeeld:
hier Het getal moet minimaal 3 nullen hebben in het breukdeel. gevolgd door 2 significante getallen (kan ook een nul hebben). Dus 3 nullen + 2 significante getallen =5 wat de
Scale. is nummer.
Kortom, wanneer u bijvoorbeeld NUMBER(6,9) . ziet , dit vertelt ons dat het breukdeel in totaal 9 cijfers zal hebben, te beginnen met de verplichte 3 nullen en gevolgd door 6 cijfers.
Hier zijn enkele voorbeelden:
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
