DECIMAL в Oracle SQL — как точно хранить числа с фиксированной точкой

🟢 DECIMAL в Oracle SQL. Введение

DECIMAL в Oracle SQL — это тип данных, предназначенный для точного хранения чисел с фиксированной точкой. Он особенно полезен там, где важно избежать ошибок округления, например:

  • в бухгалтерии

  • в финансовых расчётах

  • в расчётах налогов и процентов

Хотя чаще в Oracle используется NUMBER(p,s), тип DECIMAL является его ANSI-эквивалентом и полностью поддерживается.


🔤 Написание

sql
column_name DECIMAL(precision, scale)
  • precision — общее количество цифр

  • scale — количество цифр после запятой

Пример:

sql
amount DECIMAL(10, 2)

До 10 цифр всего, из них 2 после запятой.


🔄 Где используется

  • В таблицах с ценами, ставками, тарифами

  • При расчёте скидок, налогов, прибыли

  • В отчётности с точными финансовыми показателями

  • В логике, где нельзя использовать FLOAT или BINARY_FLOAT


🧪 10 Примеров использования DECIMAL

1️⃣ Создание таблицы с DECIMAL

sql
CREATE TABLE payments (
payment_id NUMBER,
amount DECIMAL(12, 2)
);

2️⃣ Вставка значений

sql
INSERT INTO payments (payment_id, amount)
VALUES (1, 12345.67);

3️⃣ Округление значений при расчётах

sql
SELECT ROUND(amount * 1.15, 2) AS с_налогом
FROM payments;

4️⃣ Сравнение ДЕЦИМЭЛ со значением

sql
SELECT * FROM payments
WHERE amount > 10000.00;

5️⃣ Использование ДЕЦИМЭЛ в арифметике

sql
SELECT amount, amount * 0.07 AS налог
FROM payments;

6️⃣ Работа с NULL и DECIMAL

sql
SELECT NVL(amount, 0) AS сумма
FROM payments;

7️⃣ Использование в представлении

sql
CREATE VIEW payment_summary AS
SELECT payment_id, amount, amount * 0.05 AS комиссия
FROM payments;

8️⃣ Ограничение CHECK на ДЕЦИМЭЛ

sql
ALTER TABLE payments
ADD CONSTRAINT chk_amount_pos CHECK (amount >= 0);

9️⃣ Форматированный вывод ДЕЦИМЭЛ

sql
SELECT TO_CHAR(amount, '999,999.00') AS formatted
FROM payments;

🔟  ДЕЦИМЭЛ с вычисляемым полем

sql
SELECT amount, amount * 1.2 AS total
FROM payments
WHERE amount BETWEEN 1000 AND 5000;

🧩 DECIMAL в Oracle SQL. Заключение

DECIMAL в Oracle SQL — надёжный выбор для задач, где точность важнее скорости. Он даёт полный контроль над числовыми значениями и исключает проблемы округления, характерные для FLOAT.

💡 Запомни:

  • DECIMAL(p,s) = точный аналог NUMBER(p,s)

  • Используется в финансовых, правовых и отчётных системах

  • Лучше избегать FLOAT в критичных расчётах


🔜 Следующая статья:

DBTIMEZONE в Oracle SQL — как узнать и учитывать временную зону базы данных


Понравилась статья? Поделиться с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии