Oracle
 sql >> база данни >  >> RDS >> Oracle

Как да промените символа на валутата на вашата сесия в Oracle

В Oracle Database има няколко различни NLS параметъра, които определят как се показва валутата при използване на функции като TO_CHAR() за да форматирате число като валута.

  • NLS_CURRENCY определя низа, който да се използва като символ на местна валута за L елемент с числов формат.
  • NLS_ISO_CURRENCY определя какво да се използва за C форматен елемент.
  • NLS_DUAL_CURRENCY указва какво да се използва за U форматен елемент.

Стойността по подразбиране за тях се определя от NLS_TERRITORY параметър.

Можете да промените всеки от тези параметри поотделно, ако желаете, но в повечето случаи е по-добре да промените NLS_TERRITORY параметър. Това е така, защото това имплицитно променя всички други параметри на валутата до техните стойности по подразбиране за тази територия.

Връщане на текущите стойности

Първо, нека да запитаме V$NLS_PARAMETERS преглед, за да разберете какви са нашите стойности по подразбиране:

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

Резултат:

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

Територията е Австралия и всички валутни параметри използват стойностите по подразбиране за тази територия.

Промяна на всички валутни символи

Нека променим NLS_TERRITORY параметър към нова стойност:

ALTER SESSION SET NLS_TERRITORY = 'Denmark';

Резултат:

Session altered.

Сега нека отново проверим параметрите на нашата валута NLS:

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

Резултат:

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

Относно NLS_ISO_CURRENCY параметър, въпреки че това определя кой символ на ISO валута да се използва, действителният символ на валута не се връща тук.

Следният пример илюстрира какво имам предвид:

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

Резултат:

               L             C              U 
________________ _____________ ______________ 
         kr45         DKK45            €45   

Така че, въпреки че NLS_ISO_CURRENCY параметърът има стойност DENMARK , C форматен елемент върна DKK , което е действителният символ на валута ISO за Дания.

Променете символите на валутата поотделно

Както споменахме, можете изрично да зададете всеки NLS параметър поотделно.

Например, след като зададем територията на Дания в предишния пример, сега можем да заменим всеки (или всички) символи за валута, като ги зададем изрично:

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

Резултат:

Session altered.


Session altered.


Session altered.

Сега ето какво получаваме, когато стартираме предишния SELECT изявление:

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

Резултат:

               L             C                U 
________________ _____________ ________________ 
          $45         AUD45              $45   

Така че, въпреки че нашата територия остава в Дания, нашите валутни символи отразяват различна територия (в този случай Австралия).

Едно нещо, което трябва да имате предвид, когато правите това, е, че може да се окажете в ситуация, в която параметрите на вашата валута не отразяват други параметри, като например NLS_NUMERIC_CHARACTERS (който определя кои знаци да се използват за разделителя на групата и десетичния знак).

Например:

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

Резултат:

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

В този случай имаме символи за австралийски валути, но разделителят на групата е точка (.). ) и десетичният знак е запетая (, ), което не отразява австралийските конвенции (отразява конвенцията, използвана от Дания). Австралийската конвенция е обратното – разделителят на групата е запетая (, ) и десетичният знак е точка (. ).

За да илюстрираме това, ето какво получаваме, ако просто нулираме територията на Австралия, след което стартираме изявлението отново:

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;

Резултат:

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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Сертификати на Oracle

  2. Стъпки за промяна на администраторска парола, която е загубена или забравена от EBS WebLogic домейн R12.2

  3. Свързване към база данни на Oracle с помощта на SQLAlchemy

  4. ORA-00904 невалиден идентификатор на псевдоним за декодиране

  5. SQL:Вземете записи, създадени във времеви диапазон за конкретни дати