sql >> Databáze >  >> RDS >> Oracle

Formátování čísel v Oracle pomocí TO_CHAR

Ujistěte se, že používáte datový typ čísla s měřítkem a přesností vhodnou pro data, nikoli NUMBER bez měřítka a přesnosti. Pokud budete ukládat dolary/eura/libry/atd. pak Gross World Product byla v roce 2014 řádově 100 000 000 000 000 $. Předpokládejme, že se nebudete zabývat více než tímto, pak může být sloupec měny:

NUMBER(17,2)

Pokud získáte hodnotu, která je větší než tato, musíte provést kontrolu svých dat a popřemýšlet, zda má smysl větší částka, než je světový hrubý produkt. Pokud se chystáte uložit hodnoty jako například jen nebo zimbabwské dolary, upravte odpovídajícím způsobem měřítko.

Můžete dokonce definovat podtyp v balíčku jako:

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

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

A váš kód pro jeho formátování může být:

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

Pokud se pak ve svých uložených procedurách/balíčcích odkážete na tento podtyp, nebudete moci překročit maximální velikost datového typu měny, aniž by byla vyvolána výjimka. Model formátu pro zobrazení hodnoty musí být definován pouze na jednom místě, a protože vstup je omezen na podtyp měny, pak funkce formátování nikdy nepřekročí předepsanou míru/přesnost a nemůže vypsat # 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. Dotaz MySQL pro počítání jedinečných domén z pole e-mailové adresy

  2. Jak číst a ukládat XML data v databázi

  3. Jak sloučit 2 nebo více období do 1

  4. PostgreSQL:Smyčka, dokud není podmínka pravdivá