sql >> Database >  >> RDS >> Oracle

Hoe kan een Oracle NUMBER een schaal hebben die groter is dan de precisie?

Volgens Oracle-documentatie:

Zo zie ik het:

  • Wanneer Precision is groter dan Schaal (bijv. NUMBER(8,5) ), geen probleem, dit is eenvoudig. Precision betekent 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 dan Scale (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 Scale staat 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


  1. Een-op-nul-of-een-relatie implementeren in SQL Server

  2. Hoe moet ik DDL-wijzigingen migreren van de ene omgeving naar de andere?

  3. PostgreSQL-aggregaties met meerdere parameters

  4. Batch-modus Bitmaps in SQL Server