Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Cara Mengubah Simbol Mata Uang Sesi Anda di Oracle

Di Oracle Database, ada beberapa parameter NLS berbeda yang menentukan bagaimana mata uang ditampilkan saat menggunakan fungsi seperti TO_CHAR() untuk memformat angka sebagai mata uang.

  • NLS_CURRENCY menentukan string yang akan digunakan sebagai simbol mata uang lokal untuk L elemen format angka.
  • NLS_ISO_CURRENCY menentukan apa yang akan digunakan untuk C elemen format.
  • NLS_DUAL_CURRENCY menentukan apa yang akan digunakan untuk U elemen format.

Nilai default untuk ini ditentukan oleh NLS_TERRITORY parameter.

Anda dapat mengubah setiap parameter ini satu per satu jika diinginkan, tetapi dalam banyak kasus, Anda lebih baik mengubah NLS_TERRITORY parameter. Itu karena, melakukannya secara implisit mengubah semua parameter mata uang lainnya ke nilai defaultnya untuk wilayah itu.

Kembalikan Nilai Saat Ini

Pertama, mari kita query V$NLS_PARAMETERS lihat untuk mengetahui nilai default kami:

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

Hasil:

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

Wilayahnya adalah Australia, dan semua parameter mata uang menggunakan nilai default untuk wilayah ini.

Ubah semua Simbol Mata Uang

Mari kita ubah NLS_TERRITORY parameter ke nilai baru:

ALTER SESSION SET NLS_TERRITORY = 'Denmark';

Hasil:

Session altered.

Sekarang mari kita periksa kembali parameter mata uang NLS kita:

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

Hasil:

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

Mengenai NLS_ISO_CURRENCY parameter, meskipun ini menentukan simbol mata uang ISO mana yang akan digunakan, simbol mata uang yang sebenarnya tidak ditampilkan di sini.

Contoh berikut menggambarkan apa yang saya maksud:

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

Hasil:

               L             C              U 
________________ _____________ ______________ 
         kr45         DKK45            €45   

Jadi, meskipun NLS_ISO_CURRENCY parameter memiliki nilai DENMARK , C elemen format yang dikembalikan DKK , yang merupakan simbol mata uang ISO sebenarnya untuk Denmark.

Ubah Simbol Mata Uang Satu per satu

Seperti yang disebutkan, Anda dapat secara eksplisit mengatur setiap parameter NLS satu per satu.

Misalnya, setelah menyetel wilayah ke Denmark pada contoh sebelumnya, sekarang kita dapat mengganti salah satu (atau semua) simbol mata uang dengan menyetelnya secara eksplisit:

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

Hasil:

Session altered.


Session altered.


Session altered.

Sekarang inilah yang kita dapatkan saat menjalankan SELECT sebelumnya pernyataan:

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

Hasil:

               L             C                U 
________________ _____________ ________________ 
          $45         AUD45              $45   

Jadi, meskipun wilayah kami tetap di Denmark, simbol mata uang kami mencerminkan wilayah yang berbeda (dalam hal ini, Australia).

Satu hal yang harus diperhatikan saat melakukan ini adalah, Anda bisa berakhir dalam situasi di mana parameter mata uang Anda tidak mencerminkan parameter lain, seperti NLS_NUMERIC_CHARACTERS (yang menentukan karakter mana yang akan digunakan untuk pemisah grup dan karakter desimal).

Misalnya:

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

Hasil:

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

Dalam hal ini, kami memiliki simbol mata uang Australia, tetapi pemisah grup adalah titik (. ) dan karakter desimalnya adalah koma (, ), yang tidak mencerminkan konvensi Australia (mencerminkan konvensi yang digunakan oleh Denmark). Konvensi Australia adalah sebaliknya – pemisah grup adalah koma (, ) dan karakter desimal adalah titik (. ).

Untuk mengilustrasikan hal ini, inilah yang kami dapatkan jika kami hanya mengatur ulang wilayah ke Australia, lalu menjalankan pernyataan itu lagi:

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;

Hasil:

                      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. SEC_CASE_SENSTIVE_LOGON dalam 12c

  2. TRANSLATE() Fungsi di Oracle

  3. Kolom identitas Oracle dan masukkan ke pilih

  4. Nilai yang Dipisahkan Koma di Oracle

  5. Fungsi JSON_TABLE() di Oracle