Oracle
 sql >> база данни >  >> RDS >> Oracle

Как може един Oracle NUMBER да има мащаб, по-голям от Precision?

Според документацията на Oracle:

Ето как го виждам аз:

  • Когато Precision е по-голямо от мащаб (напр. NUMBER(8,5) ), няма проблем, това е лесно. Precision означава, че числото ще има общо 8 цифри, 5 от които са в дробната част (.→), така че цялата част (←.) ще има 3 цифри. Това е лесно.
  • Когато видите този Precision е по-малък от Scale (напр. NUMBER(2, 5) ), това означава 3 неща:

    • Числото няма да има цяла част, а само дробна част. Така че 0 в целочислената част не се отчита при изчисленията, вие казвате 0,12345, а не 0,12345. Всъщност, ако посочите само 1 цифра в целочислената част, тя винаги ще връща грешка.
    • Scale представлява общия брой цифри в дробната част, които числото ще има. 5 в този случай. Така че може да бъде .12345 или .00098, но не повече от общо 5 цифри.
    • Дробната част е разделена на 2 части, значими числа и нули. Значимите числа са посочени от Precision , а минималният брой нули е равен на (Scale - Precision ). Пример :

    тук Числото ще трябва да има минимум 3 нули в дробната част. последвано от 2 значими числа (може да има и нула). Така че 3 нули + 2 значими числа =5, което е Scale номер.

Накратко, когато видите например NUMBER(6,9) , това ни казва, че дробната част ще има общо 9 цифри, започващи със задължителните 3 нули и последвани от 6 цифри.

Ето няколко примера:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Разделяне на низ, разделен със запетая, в съхранена в PL/SQL процедура

  2. ORA-01658:не може да се създаде НАЧАЛНА степен за сегмент в пространството за таблици TS_DATA

  3. Проблем с множество заявки на оракул

  4. Създава ли Oracle автоматично вторичен индекс за колони FOREIGN KEY?

  5. Разбивате голям брой редове на по-малки заявки? Паралелизъм