Oracle
 sql >> Base de données >  >> RDS >> Oracle

Comment changer le symbole monétaire de votre session dans Oracle

Dans Oracle Database, il existe quelques paramètres NLS différents qui déterminent l'affichage de la devise lors de l'utilisation de fonctions telles que TO_CHAR() pour formater un nombre en tant que devise.

  • NLS_CURRENCY spécifie la chaîne à utiliser comme symbole de devise locale pour le L élément de format numérique.
  • NLS_ISO_CURRENCY détermine quoi utiliser pour le C élément de format.
  • NLS_DUAL_CURRENCY spécifie ce qu'il faut utiliser pour le U élément de format.

La valeur par défaut pour ceux-ci est déterminée par le NLS_TERRITORY paramètre.

Vous pouvez modifier chacun de ces paramètres individuellement si vous le souhaitez, mais dans la plupart des cas, il est préférable de modifier le NLS_TERRITORY paramètre. En effet, cela modifie implicitement tous les autres paramètres de devise à leurs valeurs par défaut pour ce territoire.

Renvoyer les valeurs actuelles

Commençons par interroger le V$NLS_PARAMETERS view pour connaître nos valeurs par défaut :

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

Résultat :

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

Le territoire est l'Australie et tous les paramètres de devise utilisent les valeurs par défaut pour ce territoire.

Modifier tous les symboles monétaires

Changeons le NLS_TERRITORY paramètre à une nouvelle valeur :

ALTER SESSION SET NLS_TERRITORY = 'Denmark';

Résultat :

Session altered.

Vérifions à nouveau nos paramètres NLS de devise :

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

Résultat :

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

Concernant le NLS_ISO_CURRENCY paramètre, bien que cela détermine le symbole monétaire ISO à utiliser, le symbole monétaire réel n'est pas renvoyé ici.

L'exemple suivant illustre ce que je veux dire :

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

Résultat :

               L             C              U 
________________ _____________ ______________ 
         kr45         DKK45            €45   

Ainsi, même si le NLS_ISO_CURRENCY le paramètre a une valeur de DENMARK , le C élément de format renvoyé DKK , qui est le véritable symbole monétaire ISO du Danemark.

Modifier les symboles monétaires individuellement

Comme mentionné, vous pouvez définir explicitement chaque paramètre NLS individuellement.

Par exemple, après avoir défini le territoire sur le Danemark dans l'exemple précédent, nous pouvons maintenant remplacer n'importe lequel (ou tous) des symboles monétaires en les définissant explicitement :

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

Résultat :

Session altered.


Session altered.


Session altered.

Voici maintenant ce que nous obtenons lors de l'exécution du précédent SELECT déclaration :

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

Résultat :

               L             C                U 
________________ _____________ ________________ 
          $45         AUD45              $45   

Ainsi, même si notre territoire reste au Danemark, nos symboles monétaires reflètent un territoire différent (dans ce cas, l'Australie).

Une chose à garder à l'esprit lors de cette opération est que vous pourriez vous retrouver dans une situation où vos paramètres de devise ne reflètent pas d'autres paramètres, tels que NLS_NUMERIC_CHARACTERS (qui détermine les caractères à utiliser pour le séparateur de groupe et le caractère décimal).

Par exemple :

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

Résultat :

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

Dans ce cas, nous avons des symboles monétaires australiens, mais le séparateur de groupe est un point (. ) et le caractère décimal est une virgule (, ), qui ne reflète pas les conventions australiennes (elle reflète la convention utilisée par le Danemark). La convention australienne est l'inverse - le séparateur de groupe est une virgule (, ) et le caractère décimal est un point (. ).

Pour illustrer cela, voici ce que nous obtenons si nous réinitialisons simplement le territoire sur l'Australie, puis exécutons à nouveau l'instruction :

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;

Résultat :

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