Oracle
 sql >> Datenbank >  >> RDS >> Oracle

So ändern Sie das Währungssymbol Ihrer Sitzung in Oracle

In Oracle Database gibt es einige verschiedene NLS-Parameter, die bestimmen, wie die Währung angezeigt wird, wenn Funktionen wie TO_CHAR() verwendet werden um eine Zahl als Währung zu formatieren.

  • NLS_CURRENCY gibt die Zeichenfolge an, die als lokales Währungssymbol für L verwendet werden soll Zahlenformatelement.
  • NLS_ISO_CURRENCY bestimmt, was für C verwendet werden soll format-Element.
  • NLS_DUAL_CURRENCY gibt an, was für U verwendet werden soll format-Element.

Der Standardwert für diese wird durch das NLS_TERRITORY bestimmt Parameter.

Sie können jeden dieser Parameter einzeln ändern, wenn Sie möchten, aber in den meisten Fällen ist es besser, NLS_TERRITORY zu ändern Parameter. Das liegt daran, dass dadurch implizit alle anderen Währungsparameter auf ihre Standardwerte für dieses Gebiet geändert werden.

Gib die aktuellen Werte zurück

Lassen Sie uns zuerst die V$NLS_PARAMETERS abfragen view um herauszufinden, was unsere Standardwerte sind:

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

Ergebnis:

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

Das Gebiet ist Australien und alle Währungsparameter verwenden die Standardwerte für dieses Gebiet.

Alle Währungssymbole ändern

Lassen Sie uns das NLS_TERRITORY ändern Parameter auf einen neuen Wert:

ALTER SESSION SET NLS_TERRITORY = 'Denmark';

Ergebnis:

Session altered.

Lassen Sie uns nun unsere Währungs-NLS-Parameter erneut überprüfen:

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

Ergebnis:

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

In Bezug auf NLS_ISO_CURRENCY Parameter, obwohl dieser bestimmt, welches ISO-Währungssymbol verwendet werden soll, wird das eigentliche Währungssymbol hier nicht zurückgegeben.

Das folgende Beispiel veranschaulicht, was ich meine:

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

Ergebnis:

               L             C              U 
________________ _____________ ______________ 
         kr45         DKK45            €45   

Also, obwohl die NLS_ISO_CURRENCY Parameter hat den Wert DENMARK , das C Formatelement gab DKK zurück , das eigentliche ISO-Währungssymbol für Dänemark.

Ändern Sie die Währungssymbole einzeln

Wie bereits erwähnt, können Sie jeden NLS-Parameter explizit einzeln festlegen.

Nachdem wir beispielsweise das Gebiet im vorherigen Beispiel auf Dänemark gesetzt haben, können wir jetzt jedes (oder alle) Währungssymbol überschreiben, indem wir sie explizit setzen:

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

Ergebnis:

Session altered.


Session altered.


Session altered.

Hier ist, was wir bekommen, wenn wir das vorherige SELECT ausführen Aussage:

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

Ergebnis:

               L             C                U 
________________ _____________ ________________ 
          $45         AUD45              $45   

Obwohl unser Territorium in Dänemark bleibt, spiegeln unsere Währungssymbole also ein anderes Territorium wider (in diesem Fall Australien).

Beachten Sie dabei, dass Sie in eine Situation geraten könnten, in der Ihre Währungsparameter andere Parameter wie NLS_NUMERIC_CHARACTERS nicht widerspiegeln (der bestimmt, welche Zeichen für das Gruppentrennzeichen und das Dezimalzeichen verwendet werden sollen).

Zum Beispiel:

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

Ergebnis:

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

In diesem Fall haben wir australische Währungssymbole, aber das Gruppentrennzeichen ist ein Punkt (. ) und das Dezimalzeichen ist ein Komma (, ), die nicht die australischen Konventionen widerspiegelt (es spiegelt die von Dänemark verwendete Konvention wider). Die australische Konvention ist umgekehrt – das Gruppentrennzeichen ist ein Komma (, ) und das Dezimalzeichen ist ein Punkt (. ).

Um dies zu veranschaulichen, erhalten wir Folgendes, wenn wir das Gebiet einfach auf Australien zurücksetzen und die Anweisung dann erneut ausführen:

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;

Ergebnis:

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