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

Форматиране на числа в Oracle с помощта на TO_CHAR

Уверете се, че използвате числовия тип данни с мащаб и прецизност, подходящи за данните, вместо да използвате NUMBER без мащаб и прецизност. Ако ще съхранявате долари/евро/паундове/и т.н. след това Брутния световен продукт беше от порядъка на $100 000 000 000 000 през 2014 г. Да приемем, че няма да имате работа с повече от това, тогава вашата валутна колона може да бъде:

NUMBER(17,2)

Ако получите стойност, която е по-голяма от тази, тогава трябва да извършите проверка за надеждност на вашите данни и да помислите дали има смисъл сума, по-голяма от световния брутен продукт. Ако ще съхранявате стойностите като например йени или зимбабвийски долари, коригирайте скалата по подходящ начин.

Можете дори да дефинирате подтип в пакет като:

CREATE PACKAGE currencies_pkg IS
  SUBTYPE currency_type IS NUMBER(17,2);

  FUNCTION formatCurrency(
    amount IN CURRENCY_TYPE
  ) RETURN VARCHAR2;
END;
/

А вашият код за форматиране може да бъде:

CREATE PACKAGE BODY currencies_pkg IS
  FUNCTION formatCurrency(
    amount IN CURRENCY_TYPE
  ) RETURN VARCHAR2
  IS
  BEGIN
    RETURN TO_CHAR( currency_value, 'FM999999999999990D00' );
  END;
END;
/

След това, ако посочите този подтип във вашите съхранени процедури/пакети, няма да можете да надвишите максималния размер на типа данни за валута, без да бъде повдигнато изключение. Моделът на формат за показване на стойността трябва да бъде дефиниран само на едно място и тъй като въвеждането е ограничено до подтипа на валутата, тогава функцията за форматиране никога няма да надхвърли наложения мащаб/прецизност и не може да изведе # с.

CREATE PROCEDURE your_procedure(
  in_value1 IN ACCOUNTS_TABLE.ACCOUNT_BALANCE%TYPE,
  in_value2 IN ACCOUNTS_TABLE.ACCOUNT_BALANCE%TYPE
)
IS
  v_value CURRENCIES_PKG.CURRENCY_TYPE;
BEGIN
  -- Do something
  v_value := in_value1 + in_value2;
  -- Output formatted value
  DBMS_OUTPUT.PUT_LINE( CURRENCIES_PKG.formatCurrency( v_value ) );
END;
/


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Изтриване на МНОГО данни в Oracle

  2. Разлика в производителността на заявките pl/sql за вмъкване на всички и обикновени SQL вмъквания

  3. Не можете да използвате името на PL/SQL таблица като променлива в PL/SQL процедура?

  4. Oracle:'=ANY()' срещу 'IN ()'

  5. Oracle DataReader връща 1 ред, но методът Read връща false