Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Formatowanie liczb w Oracle za pomocą TO_CHAR

Upewnij się, że używasz liczbowego typu danych ze skalą i precyzją odpowiednią do danych, zamiast używać LICZBA bez skali i precyzji. Jeśli zamierzasz przechowywać dolary/euro/funty/itd. następnie Produkt Gross World był rzędu 100 000 000 000 000 w 2014 roku. Załóżmy, że nie będziesz miał do czynienia z większą liczbą, wtedy Twoja kolumna walutowa może wyglądać następująco:

NUMBER(17,2)

Jeśli uzyskasz wartość większą niż ta, musisz przeprowadzić kontrolę poprawności danych i zastanowić się, czy kwota większa niż produkt brutto na świecie ma sens. Jeśli zamierzasz przechowywać wartości, na przykład jeny lub dolary Zimbabwe, odpowiednio dostosuj skalę.

Możesz nawet zdefiniować podtyp w pakiecie jako:

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

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

A Twój kod do sformatowania może być:

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

Następnie, jeśli odwołujesz się do tego podtypu w procedurach składowanych/pakietach, nie będzie można przekroczyć maksymalnego rozmiaru typu danych waluty bez zgłaszania wyjątku. Model formatu do wyświetlania wartości musi być zdefiniowany tylko w jednym miejscu, a ponieważ dane wejściowe są ograniczone do podtypu waluty, funkcja formatowania nigdy nie przekroczy narzuconej skali/precyzji i nie może wyprowadzić # s.

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. C# - Czy powinienem używać statycznego połączenia z bazą danych?

  2. kompilowanie nieprawidłowych procedur wyroczni

  3. czy możemy wykonać polecenie uniksowe z procedury oracle10g?

  4. Wybierz drugą najbardziej minimalną wartość w Oracle

  5. Jak mogę sprawdzić, czy właściciel ma uprawnienia do wykonywania procedury sklepu w Oracle?