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 untukL
elemen format angka.NLS_ISO_CURRENCY
menentukan apa yang akan digunakan untukC
elemen format.NLS_DUAL_CURRENCY
menentukan apa yang akan digunakan untukU
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