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

Come modificare il simbolo della valuta della sessione in Oracle

In Oracle Database, ci sono alcuni parametri NLS diversi che determinano come viene visualizzata la valuta quando si utilizzano funzioni come TO_CHAR() per formattare un numero come valuta.

  • NLS_CURRENCY specifica la stringa da utilizzare come simbolo di valuta locale per la L elemento formato numero.
  • NLS_ISO_CURRENCY determina cosa usare per la C elemento di formato.
  • NLS_DUAL_CURRENCY specifica cosa usare per la U elemento di formato.

Il valore predefinito per questi è determinato da NLS_TERRITORY parametro.

Puoi modificare ciascuno di questi parametri individualmente se lo desideri, ma nella maggior parte dei casi è meglio cambiare il NLS_TERRITORY parametro. Questo perché, così facendo, si modificano implicitamente tutti gli altri parametri valutari sui valori predefiniti per quel territorio.

Restituisci i valori correnti

Per prima cosa, interroghiamo V$NLS_PARAMETERS visualizza per scoprire quali sono i nostri valori predefiniti:

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

Risultato:

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

Il territorio è l'Australia e tutti i parametri valutari utilizzano i valori predefiniti per questo territorio.

Cambia tutti i simboli di valuta

Cambiamo il NLS_TERRITORY parametro a un nuovo valore:

ALTER SESSION SET NLS_TERRITORY = 'Denmark';

Risultato:

Session altered.

Ora controlliamo di nuovo i nostri parametri NLS di valuta:

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

Risultato:

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

Per quanto riguarda il NLS_ISO_CURRENCY parametro, sebbene questo determini quale simbolo di valuta ISO utilizzare, il simbolo di valuta effettivo non viene restituito qui.

L'esempio seguente illustra cosa intendo:

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

Risultato:

               L             C              U 
________________ _____________ ______________ 
         kr45         DKK45            €45   

Quindi, anche se il NLS_ISO_CURRENCY il parametro ha un valore di DENMARK , il C elemento di formato restituito DKK , che è l'attuale simbolo della valuta ISO per la Danimarca.

Cambia i simboli di valuta singolarmente

Come accennato, puoi impostare in modo esplicito ogni parametro NLS individualmente.

Ad esempio, dopo aver impostato il territorio sulla Danimarca nell'esempio precedente, ora possiamo sovrascrivere uno qualsiasi (o tutti) i simboli di valuta impostandoli esplicitamente:

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

Risultato:

Session altered.


Session altered.


Session altered.

Ora ecco cosa otteniamo eseguendo il precedente SELECT dichiarazione:

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

Risultato:

               L             C                U 
________________ _____________ ________________ 
          $45         AUD45              $45   

Quindi, anche se il nostro territorio rimane in Danimarca, i nostri simboli di valuta riflettono un territorio diverso (in questo caso, l'Australia).

Una cosa a cui prestare attenzione quando si esegue questa operazione è che potresti trovarti in una situazione in cui i parametri della tua valuta non riflettono altri parametri, come NLS_NUMERIC_CHARACTERS (che determina quali caratteri utilizzare per il separatore di gruppo e il carattere decimale).

Ad esempio:

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

Risultato:

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

In questo caso, abbiamo i simboli di valuta australiana, ma il separatore di gruppo è un punto (. ) e il carattere decimale è una virgola (, ), che non riflette le convenzioni australiane (rispecchia la convenzione utilizzata dalla Danimarca). La convenzione australiana è il contrario:il separatore di gruppo è una virgola (, ) e il carattere decimale è un punto (. ).

Per illustrare questo, ecco cosa otteniamo se reimpostiamo semplicemente il territorio all'Australia, quindi eseguiamo nuovamente l'istruzione:

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;

Risultato:

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