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

Jak zmienić symbol waluty sesji w Oracle?

W Oracle Database istnieje kilka różnych parametrów NLS, które określają sposób wyświetlania waluty podczas korzystania z funkcji takich jak TO_CHAR() aby sformatować liczbę jako walutę.

  • NLS_CURRENCY określa ciąg znaków, który ma być używany jako symbol waluty lokalnej dla L element formatu liczb.
  • NLS_ISO_CURRENCY określa, czego użyć dla C element formatu.
  • NLS_DUAL_CURRENCY określa, czego użyć dla U element formatu.

Domyślna wartość dla nich jest określona przez NLS_TERRITORY parametr.

Możesz zmienić każdy z tych parametrów indywidualnie, jeśli chcesz, ale w większości przypadków lepiej zmienić NLS_TERRITORY parametr. Dzieje się tak, ponieważ robi to domyślnie zmienia wszystkie inne parametry waluty na ich wartości domyślne dla tego terytorium.

Zwróć aktualne wartości

Najpierw zapytajmy o V$NLS_PARAMETERS Zobacz, aby dowiedzieć się, jakie są nasze wartości domyślne:

SELECT 
    PARAMETER,
    VALUE
FROM V$NLS_PARAMETERS
WHERE PARAMETER IN (
    'NLS_TERRITORY',
    'NLS_CURRENCY',
    'NLS_ISO_CURRENCY',
    'NLS_DUAL_CURRENCY'    
    );

Wynik:

           PARAMETER        VALUE 
____________________ ____________ 
NLS_TERRITORY        AUSTRALIA    
NLS_CURRENCY         $            
NLS_ISO_CURRENCY     AUSTRALIA    
NLS_DUAL_CURRENCY    $           

Terytorium to Australia, a wszystkie parametry waluty używają wartości domyślnych dla tego terytorium.

Zmień wszystkie symbole walut

Zmieńmy NLS_TERRITORY parametr na nową wartość:

ALTER SESSION SET NLS_TERRITORY = 'Denmark';

Wynik:

Session altered.

Sprawdźmy teraz ponownie nasze parametry NLS waluty:

SELECT 
    PARAMETER,
    VALUE
FROM V$NLS_PARAMETERS
WHERE PARAMETER IN (
    'NLS_TERRITORY',
    'NLS_CURRENCY',
    'NLS_ISO_CURRENCY',
    'NLS_DUAL_CURRENCY'    
    );

Wynik:

           PARAMETER      VALUE 
____________________ __________ 
NLS_TERRITORY        DENMARK    
NLS_CURRENCY         kr         
NLS_ISO_CURRENCY     DENMARK    
NLS_DUAL_CURRENCY    €          

Odnośnie NLS_ISO_CURRENCY parametr, chociaż określa, którego symbolu waluty ISO użyć, rzeczywisty symbol waluty nie jest tutaj zwracany.

Poniższy przykład ilustruje, co mam na myśli:

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

Wynik:

               L             C              U 
________________ _____________ ______________ 
         kr45         DKK45            €45   

Tak więc, mimo że NLS_ISO_CURRENCY parametr ma wartość DENMARK , C zwrócony element formatu DKK , który jest rzeczywistym symbolem waluty ISO dla Danii.

Pojedynczo zmieniaj symbole walut

Jak wspomniano, każdy parametr NLS można ustawić osobno.

Na przykład, po ustawieniu terytorium na Danię w poprzednim przykładzie, możemy teraz zastąpić dowolny (lub wszystkie) symbole waluty, ustawiając je jawnie:

ALTER SESSION SET NLS_CURRENCY = '$';
ALTER SESSION SET NLS_ISO_CURRENCY = 'AUSTRALIA';
ALTER SESSION SET NLS_DUAL_CURRENCY = '$';

Wynik:

Session altered.


Session altered.


Session altered.

Oto, co otrzymujemy, uruchamiając poprzedni SELECT oświadczenie:

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

Wynik:

               L             C                U 
________________ _____________ ________________ 
          $45         AUD45              $45   

Tak więc, mimo że nasze terytorium pozostaje w Danii, nasze symbole walut odzwierciedlają inne terytorium (w tym przypadku Australia).

Jedną z rzeczy, o których należy pamiętać podczas robienia tego, jest to, że możesz znaleźć się w sytuacji, w której parametry Twojej waluty nie odzwierciedlają innych parametrów, takich jak NLS_NUMERIC_CHARACTERS (co określa, które znaki mają być używane jako separator grup i znak dziesiętny).

Na przykład:

SELECT 
    TO_CHAR(4599.60, 'L99G999D99') AS "L",
    TO_CHAR(4599.60, 'C99G999D99') AS "C",
    TO_CHAR(4599.60, 'U99G999D99') AS "U"
FROM DUAL;

Wynik:

                      L                    C                       U 
_______________________ ____________________ _______________________ 
           $4.599,60          AUD4.599,60               $4.599,60   

W tym przypadku mamy symbole walut australijskich, ale separatorem grup jest kropka (. ), a znak dziesiętny to przecinek (, ), która nie odzwierciedla konwencji australijskich (odzwierciedla konwencję stosowaną przez Danię). Konwencja australijska jest na odwrót – separatorem grup jest przecinek (, ), a znak dziesiętny to kropka (. ).

Aby to zilustrować, oto, co otrzymamy, jeśli po prostu zresetujemy terytorium do Australii, a następnie ponownie uruchomimy oświadczenie:

ALTER SESSION SET NLS_TERRITORY = 'Australia';

SELECT 
    TO_CHAR(4599.60, 'L99G999D99') AS "L",
    TO_CHAR(4599.60, 'C99G999D99') AS "C",
    TO_CHAR(4599.60, 'U99G999D99') AS "U"
FROM DUAL;

Wynik:

                      L                    C                       U 
_______________________ ____________________ _______________________ 
           $4,599.60          AUD4,599.60               $4,599.60    

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak wyraźniej wyświetlać dane tabeli w Oracle sqlplus?

  2. Używanie `SELECT` do wywołania funkcji

  3. SQL Inner join w wybranych instrukcjach

  4. Używanie 'kolumny wyrażenia przypadku' w klauzuli where

  5. Jakie sytuacje powodują, że pakiety Oracle stają się nieważne?