sql >> Base de Datos >  >> RDS >> Oracle

¿Cómo puede un NÚMERO Oracle tener una Escala mayor que la Precisión?

Según la documentación de Oracle:

Así es como lo veo:

  • Cuando Precision es mayor que Scale (p. ej., NUMBER(8,5) ), no hay problema, esto es sencillo. Precision significa que el número tendrá un total de 8 dígitos, 5 de los cuales están en la parte fraccionaria (.→), por lo que la parte entera (←.) tendrá 3 dígitos. Esto es fácil.
  • Cuando veas esa Precision es menor que Scale (por ejemplo, NUMBER(2, 5) ), esto significa 3 cosas:

    • El número no tendrá ninguna parte entera, solo una parte fraccionaria. Entonces, el 0 en la parte entera no se cuenta en los cálculos, dices .12345, no 0.12345. De hecho, si especifica solo 1 dígito en la parte entera, siempre devolverá un error.
    • La Scale representa el número total de dígitos en la parte fraccionaria que tendrá el número. 5 en este caso. Entonces puede ser .12345 o .00098 pero no más de 5 dígitos en total.
    • La parte fraccionaria se divide en 2 partes, números significativos y ceros. Los números significativos se especifican mediante Precision , y el número mínimo de ceros es igual a (Scale - Precision ). Ejemplo:

    aquí El número deberá tener un mínimo de 3 ceros en la parte fraccionaria. seguido de 2 números significativos (también podría tener un cero). Así que 3 ceros + 2 números significativos =5 que es la Scale número.

En resumen, cuando vea, por ejemplo, NUMBER(6,9) , esto nos dice que la parte fraccionaria tendrá 9 dígitos en total, comenzando por 3 ceros obligatorios y seguido de 6 dígitos.

Estos son algunos ejemplos:

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