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

Jak změnit symbol měny relace v Oracle

V databázi Oracle existuje několik různých parametrů NLS, které určují způsob zobrazení měny při použití funkcí jako TO_CHAR() pro formátování čísla jako měny.

  • NLS_CURRENCY určuje řetězec, který se má použít jako symbol místní měny pro L prvek formátu čísla.
  • NLS_ISO_CURRENCY určuje, co se má použít pro C prvek formátu.
  • NLS_DUAL_CURRENCY určuje, co se má použít pro U prvek formátu.

Výchozí hodnota pro tyto položky je určena NLS_TERRITORY parametr.

Každý z těchto parametrů můžete změnit jednotlivě, pokud chcete, ale ve většině případů je lepší změnit NLS_TERRITORY parametr. Je to proto, že se tím implicitně změní všechny ostatní parametry měny na jejich výchozí hodnoty pro dané území.

Vrátí aktuální hodnoty

Nejprve se zeptejme V$NLS_PARAMETERS zobrazit, abyste zjistili, jaké jsou naše výchozí hodnoty:

VYBERTE PARAMETR, VALUEFROM V$NLS_PARAMETERSWHERE PARAMETER IN ( 'NLS_TERRITORY', 'NLS_CURRENCY', 'NLS_ISO_CURRENCY', 'NLS_DUAL_CURRENCY'); 

Výsledek:

 HODNOTA PARAMETRU ____________________ ____________ NLS_TERRITORY AUSTRÁLIE NLS_CURRENCY $ NLS_ISO_CURRENCY AUSTRÁLIE NLS_DUAL_CURRENCY $ 

Územím je Austrálie a všechny parametry měny používají výchozí hodnoty pro toto území.

Změnit všechny symboly měn

Pojďme změnit NLS_TERRITORY parametr na novou hodnotu:

ALTER SESSION SET NLS_TERRITORY ='Dánsko'; 

Výsledek:

Relace změněna.

Nyní znovu zkontrolujeme parametry NLS v naší měně:

VYBERTE PARAMETR, VALUEFROM V$NLS_PARAMETERSWHERE PARAMETER IN ( 'NLS_TERRITORY', 'NLS_CURRENCY', 'NLS_ISO_CURRENCY', 'NLS_DUAL_CURRENCY'); 

Výsledek:

 HODNOTA PARAMETRU ____________________ __________ NLS_TERRITORY DÁNSKO NLS_CURRENCY kr NLS_ISO_CURRENCY DÁNSKO NLS_DUAL_CURRENCY EUR 

Ohledně NLS_ISO_CURRENCY Ačkoli to určuje, který symbol měny ISO se má použít, skutečný symbol měny se zde nevrací.

Následující příklad ilustruje, co mám na mysli:

SELECT TO_CHAR(45, 'L99') AS "L", TO_CHAR(45, 'C99') AS "C", TO_CHAR(45, 'U99') AS "U"FROM DUAL; 

Výsledek:

 L C U ________________ _____________ ______________ kr45 DKK 45 € 

Tedy i když NLS_ISO_CURRENCY parametr má hodnotu DÁNSKO , C element format vrátil DKK , což je skutečný symbol měny ISO pro Dánsko.

Změna symbolů měn jednotlivě

Jak již bylo zmíněno, každý parametr NLS můžete explicitně nastavit samostatně.

Když jsme například v předchozím příkladu nastavili území na Dánsko, můžeme nyní přepsat kterýkoli (nebo všechny) symboly měny jejich explicitním nastavením:

ZMĚNIT SADA SEKCE NLS_CURRENCY ='$';ZMĚNIT SADA SEKCE NLS_ISO_CURRENCY ='AUSTRALIA';ZMĚNIT SADA SEKCE NLS_DUAL_CURRENCY =' $'; 

Výsledek:

Relace změněna.Relace změněna.Relace změněna.

Zde je to, co získáme spuštěním předchozího SELECT prohlášení:

SELECT TO_CHAR(45, 'L99') AS "L", TO_CHAR(45, 'C99') AS "C", TO_CHAR(45, 'U99') AS "U"FROM DUAL; 

Výsledek:

 L C U ________________ _____________ ________________ $ 45 AUD45 $ 45 

Takže i když naše území zůstává v Dánsku, naše symboly měn odrážejí jiné území (v tomto případě Austrálii).

Jedna věc, kterou je třeba mít na paměti, je, že se můžete dostat do situace, kdy vaše parametry měny neodrážejí jiné parametry, jako je NLS_NUMERIC_CHARACTERS (což určuje, které znaky se mají použít pro oddělovač skupiny a desetinný znak).

Například:

SELECT TO_CHAR(4599,60, 'L99G999D99') AS "L", TO_CHAR(4599,60, 'C99G999D99') AS "C", TO_CHAR(4599,60, 'U99G999D"FROM') AS "DUAL" kód> 

Výsledek:

 L C U _______________________ ____________________ _______________________ $ 4.599,60 AUD, 60 AUD, 4.599,60 $ v ceně. 

V tomto případě máme australské symboly měn, ale oddělovač skupiny je tečka (. ) a desetinným znakem je čárka (, ), který neodráží australské konvence (odráží konvenci používanou Dánskem). Australská konvence je obrácená – oddělovač skupiny je čárka (, ) a desetinným znakem je tečka (. ).

Abychom to ilustrovali, zde je to, co dostaneme, pokud jednoduše resetujeme území na Austrálii a poté znovu spustíme příkaz:

ALTER SESSION SET NLS_TERRITORY ='Austrálie';VYBERTE TO_CHAR(4599,60, 'L99G999D99') JAKO "L", TO_CHAR(4599,60, 'C99G999D99') JAKO "C", TO99'CHAR99,9' JAKO "U" OD DUAL; 

Výsledek:

 L C U ________________________ ____________________ ________________________ $ 4 599,60 AUD 4 599,60 $ v ceně
                
  1. Jaký je rozdíl mezi spojením hash a spojením sloučení (Oracle RDBMS)?

  2. JDBC Create Table Příklad použití příkazu

  3. Jak změnit řazení databáze SQL Server pomocí T-SQL

  4. Zjistěte, zda hodnota obsahuje alespoň jednu číselnou číslici v PostgreSQL