sql >> Database >  >> RDS >> Oracle

Hoe u het valutasymbool van uw sessie in Oracle kunt wijzigen

In Oracle Database zijn er een paar verschillende NLS-parameters die bepalen hoe valuta wordt weergegeven bij gebruik van functies zoals TO_CHAR() om een ​​getal als valuta op te maken.

  • NLS_CURRENCY specificeert de tekenreeks die moet worden gebruikt als het lokale valutasymbool voor de L getal formaat element.
  • NLS_ISO_CURRENCY bepaalt wat te gebruiken voor de C formaatelement.
  • NLS_DUAL_CURRENCY specificeert wat te gebruiken voor de U formaatelement.

De standaardwaarde hiervoor wordt bepaald door de NLS_TERRITORY parameter.

U kunt elk van deze parameters afzonderlijk wijzigen als u dat wilt, maar in de meeste gevallen kunt u beter de NLS_TERRITORY wijzigen parameter. Dat komt omdat, als u dit doet, impliciet alle andere valutaparameters worden gewijzigd in hun standaardwaarden voor dat gebied.

Retourneer de huidige waarden

Laten we eerst de V$NLS_PARAMETERS . opvragen bekijken om te zien wat onze standaardwaarden zijn:

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

Resultaat:

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

Het territorium is Australië en alle valutaparameters gebruiken de standaardwaarden voor dit territorium.

Wijzig alle valutasymbolen

Laten we de NLS_TERRITORY wijzigen parameter naar een nieuwe waarde:

ALTER SESSION SET NLS_TERRITORY = 'Denmark';

Resultaat:

Session altered.

Laten we nu nogmaals onze valuta NLS-parameters controleren:

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

Resultaat:

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

Met betrekking tot de NLS_ISO_CURRENCY parameter, hoewel dit bepaalt welk ISO-valutasymbool moet worden gebruikt, wordt het werkelijke valutasymbool hier niet geretourneerd.

Het volgende voorbeeld illustreert wat ik bedoel:

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

Resultaat:

               L             C              U 
________________ _____________ ______________ 
         kr45         DKK45            €45   

Dus, hoewel de NLS_ISO_CURRENCY parameter heeft een waarde van DENMARK , de C formaatelement geretourneerd DKK , het eigenlijke ISO-valutasymbool voor Denemarken.

Verander de valutasymbolen afzonderlijk

Zoals vermeld, kunt u elke NLS-parameter expliciet afzonderlijk instellen.

Als we bijvoorbeeld het gebied in het vorige voorbeeld op Denemarken hebben ingesteld, kunnen we nu alle (of alle) valutasymbolen overschrijven door ze expliciet in te stellen:

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

Resultaat:

Session altered.


Session altered.


Session altered.

Dit is wat we krijgen bij het uitvoeren van de vorige SELECT verklaring:

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

Resultaat:

               L             C                U 
________________ _____________ ________________ 
          $45         AUD45              $45   

Dus hoewel ons territorium Denemarken blijft, geven onze valutasymbolen een ander territorium weer (in dit geval Australië).

Een ding om rekening mee te houden wanneer u dit doet, is dat u in een situatie terecht kunt komen waarin uw valutaparameters niet overeenkomen met andere parameters, zoals NLS_NUMERIC_CHARACTERS (die bepaalt welke tekens worden gebruikt voor het groepsscheidingsteken en het decimale teken).

Bijvoorbeeld:

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

Resultaat:

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

In dit geval hebben we Australische valutasymbolen, maar het groepsscheidingsteken is een punt (. ) en het decimale teken is een komma (, ), die de Australische conventies niet weerspiegelt (het weerspiegelt de conventie die door Denemarken wordt gebruikt). Australische conventie is andersom – het groepsscheidingsteken is een komma (, ) en het decimale teken is een punt (. ).

Om dit te illustreren, is dit wat we krijgen als we het territorium eenvoudig terugzetten naar Australië en de instructie vervolgens opnieuw uitvoeren:

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;

Resultaat:

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

  1. Een reeks SQL-query's uitvoeren met behulp van een batchbestand?

  2. Hoe kan ik dubbele rijen verwijderen?

  3. Oracle verbinden met PostgreSQL

  4. Hoe helpt databaseontwerp docenten, lessen en studenten te organiseren?