sql >> Database teknologi >  >> RDS >> Oracle

Sådan ændres din sessions valutasymbol i Oracle

I Oracle Database er der et par forskellige NLS-parametre, der bestemmer, hvordan valuta vises, når du bruger funktioner som TO_CHAR() for at formatere et tal som en valuta.

  • NLS_CURRENCY angiver den streng, der skal bruges som det lokale valutasymbol for L talformatelement.
  • NLS_ISO_CURRENCY bestemmer, hvad der skal bruges til C formatelement.
  • NLS_DUAL_CURRENCY angiver, hvad der skal bruges til U formatelement.

Standardværdien for disse bestemmes af NLS_TERRITORY parameter.

Du kan ændre hver af disse parametre individuelt, hvis du ønsker det, men i de fleste tilfælde er det bedre at ændre NLS_TERRITORY parameter. Det er fordi, at gøre det implicit ændrer alle de andre valutaparametre til deres standardværdier for det pågældende område.

Returner de aktuelle værdier

Lad os først forespørge på V$NLS_PARAMETERS for at finde ud af, hvad vores standardværdier er:

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

Resultat:

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

Området er Australien, og alle valutaparametre bruger standardværdierne for dette område.

Skift alle valutasymboler

Lad os ændre NLS_TERRITORY parameter til en ny værdi:

ALTER SESSION SET NLS_TERRITORY = 'Denmark';

Resultat:

Session altered.

Lad os nu tjekke vores valuta NLS-parametre igen:

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

Resultat:

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

Med hensyn til NLS_ISO_CURRENCY parameter, selvom dette bestemmer hvilket ISO-valutasymbol der skal bruges, returneres det faktiske valutasymbol ikke her.

Følgende eksempel illustrerer, hvad jeg mener:

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

Resultat:

               L             C              U 
________________ _____________ ______________ 
         kr45         DKK45            €45   

Så selvom NLS_ISO_CURRENCY parameteren har en værdi på DENMARK , C formatelement returnerede DKK , som er det egentlige ISO-valutasymbol for Danmark.

Skift valutasymbolerne individuelt

Som nævnt kan du udtrykkeligt indstille hver NLS-parameter individuelt.

For eksempel, efter at have sat territoriet til Danmark i det foregående eksempel, kan vi nu tilsidesætte et hvilket som helst (eller alle) valutasymbolerne ved at indstille dem eksplicit:

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

Resultat:

Session altered.


Session altered.


Session altered.

Her er hvad vi får, når vi kører den forrige SELECT erklæring:

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

Resultat:

               L             C                U 
________________ _____________ ________________ 
          $45         AUD45              $45   

Så selvom vores territorium forbliver i Danmark, afspejler vores valutasymboler et andet territorium (i dette tilfælde Australien).

En ting, du skal være opmærksom på, når du gør dette, er, at du kan ende i en situation, hvor dine valutaparametre ikke afspejler andre parametre, såsom NLS_NUMERIC_CHARACTERS (som bestemmer, hvilke tegn der skal bruges til gruppeseparator og decimaltegn).

For eksempel:

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

Resultat:

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

I dette tilfælde har vi australske valutasymboler, men gruppeseparatoren er et punktum (. ), og decimaltegnet er et komma (, ), som ikke afspejler australske konventioner (det afspejler den konvention, Danmark bruger). Australsk konvention er omvendt – gruppeseparatoren er et komma (, ), og decimaltegnet er et punktum (. ).

For at illustrere dette er her, hvad vi får, hvis vi blot nulstiller territoriet til Australien og derefter kører erklæringen igen:

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;

Resultat:

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

  1. På virkningen af ​​helsides skriver

  2. Hent et objekts ID fra dets navn i SQL Server:OBJECT_ID()

  3. Ligesom Case Sensitive i MySQL

  4. Sådan nulstiller du MySQL Root Users Password