Ifølge Oracle-dokumentationen:
Sådan ser jeg det :
- Når
Precision
er større end skala (f.eks.NUMBER(8,5)
), intet problem, dette er ligetil.Precision
betyder, at tallet i alt vil have 8 cifre, hvoraf 5 er i brøkdelen (.→), så heltalsdelen (←.) vil have 3 cifre. Det er nemt. -
Når du ser den
Precision
er mindre endScale
(f.eks.NUMBER(2, 5)
), betyder det 3 ting :- Tallet vil ikke have nogen heltalsdel, kun brøkdel. Så 0'et i heltalsdelen tælles ikke med i beregningerne, du siger .12345 ikke 0.12345. Faktisk, hvis du kun angiver 1 ciffer i heltalsdelen, vil det altid returnere en fejl.
Scale
repræsenterer det samlede antal cifre i brøkdelen, som tallet vil have. 5 i dette tilfælde. Så det kan være .12345 eller .00098, men ikke mere end 5 cifre i alt.- Brøkdelen er opdelt i 2 dele, signifikante tal og nuller. Væsentlige tal er angivet med
Precision
, og minimumsantallet af nuller er lig med (Scale
-Precision
). Eksempel:
her Tallet vil have minimum 3 nuller i brøkdelen. efterfulgt af 2 signifikante tal (kan også have et nul). Så 3 nuller + 2 signifikante tal =5, som er
Scale
nummer.
Kort sagt, når du f.eks. ser NUMBER(6,9)
, dette fortæller os, at brøkdelen vil have 9 cifre i alt, startende med obligatoriske 3 nuller og efterfulgt af 6 cifre.
Her er nogle eksempler:
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