sql >> データベース >  >> RDS >> Oracle

Oracleでセッションの通貨記号を変更する方法

    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 パラメータの値はDENMARKC 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    

    1. PHPを使用してMySQLデータベースに配列を挿入します

    2. アクティビティにカスタムアダプタを追加して、リストをアクティビティに表示するにはどうすればよいですか?

    3. SQL Serverのテーブル名がdboで始まるのはなぜですか?

    4. MySQLでパラメータを使用してビューを作成できますか?