Oracle Databaseには、TO_CHAR()
などの関数を使用するときに通貨がどのように表示されるかを決定するいくつかの異なるNLSパラメータがあります。 数値を通貨としてフォーマットします。
-
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
format要素が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
したがって、私たちの領土はデンマークに残っていますが、通貨記号は別の領土(この場合はオーストラリア)を反映しています。
これを行う際に注意すべきことの1つは、通貨パラメータがNLS_NUMERIC_CHARACTERS
などの他のパラメータを反映しない状況になる可能性があることです。 (グループ区切り文字と10進文字に使用する文字を決定します。)
例:
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
この場合、オーストラリアの通貨記号がありますが、グループ区切り文字はピリオド(.
)です。 )および10進文字はコンマ(,
)、これはオーストラリアの規則を反映していません(デンマークで使用されている規則を反映しています)。オーストラリアの慣習はその逆です。グループ区切り文字はコンマ(,
)です。 )および10進文字はピリオド(.
。
これを説明するために、領土をオーストラリアにリセットしてから、ステートメントを再度実行すると、次のようになります。
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