3 グローバリゼーション・サポート環境の設定

この章では、グローバリゼーション・サポート環境の設定方法について説明します。次のトピックが含まれています:

3.1 NLSパラメータの設定

NLS (各国語サポート)パラメータにより、クライアントおよびサーバー両方でのロケール固有の動作が決定します。NLSパラメータは、次の4通りの方法で指定できます。

  • サーバー上の初期化パラメータとして指定します。

    パラメータを初期化パラメータ・ファイルに含めて、デフォルトのセッションNLS環境を指定できます。この設定は、クライアント側には影響を与えません。サーバーの動作のみを制御します。たとえば、次のようにします。

    NLS_TERRITORY = "CZECH REPUBLIC"
    
  • クライアントの環境変数として指定します。

    NLS環境変数(プラットフォーム依存の場合があります)を使用して、クライアントに対してロケールに依存する動作を指定できます。また、初期化パラメータ・ファイルでセッションに設定されているデフォルト値をオーバーライドできます。UNIXシステムでの例を示します。

    % setenv NLS_SORT FRENCH
    
  • ALTER SESSION文を使用して指定します。

    ALTER SESSION文に設定されているNLSパラメータを使用すると、初期化パラメータ・ファイルのセッションに設定されたデフォルト値や環境変数を使用してクライアントで設定したデフォルト値をオーバーライドできます。

    SQL> ALTER SESSION SET NLS_SORT = FRENCH;

    関連項目:

    ALTER SESSION文の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

  • SQL関数内で指定します

    NLSパラメータを明示的に使用すると、SQL関数内でのNLS動作をハードコード化できます。これによって、初期化パラメータ・ファイルのセッションに設定されたデフォルト値、環境変数を使用してクライアントで設定されたデフォルト値、またはALTER SESSIONによってセッションに設定されたデフォルト値がオーバーライドされます。たとえば、次のようにします。

    TO_CHAR(hiredate, 'DD/MON/YYYY', 'nls_date_language = FRENCH')

    関連項目:

    TO_CHAR関数などのSQL関数の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

表3-1に、NLSパラメータの各種設定方法の優先順位を示します。優先順位の低い設定は、優先順位の高い設定によってオーバーライドされます。たとえば、初期化パラメータ・ファイル内で指定された値を、SQL関数で明示的に設定された値でオーバーライドできます。

デフォルト値の優先順位は最も低くなります。それらはデータベース作成時に設定され、変更できません。それらを他の方法でオーバーライドできますが、例外として、仮想列、CHECK制約およびファイングレイン監査(FGA)ルールで式を評価するときには必ずデフォルト値が使用されます。これらの式では、それらが存在する間は結果は決定論的である必要があり、変更される可能性のあるNLSパラメータ設定への依存はできません。

表3-1 NLSパラメータの設定方法とその優先順位

優先順位 方法

1 (最も高い優先順位)

SQL関数での明示的な設定

2

ALTER SESSION文による設定

3

環境変数としての設定

4

初期化パラメータ・ファイル内での指定

5 (最も低い)

データベース作成時に指定されたデフォルト値

表3-2に、使用可能なNLSパラメータを示します。SQL関数のNLSパラメータを指定するには特定の関数を使用する必要があるため、この表にはSQL関数の有効範囲は示されていません。この表では、有効範囲に次の値を示します。

   I = 初期化パラメータ・ファイル
   E = 環境変数
   A = ALTER SESSION

表3-2 NLSパラメータ

パラメータ 説明 デフォルト 有効範囲

NLS_CALENDAR

暦法

Gregorian(グレゴリオ暦)

I、E、A

NLS_COMP

SQL、PL/SQL演算子の比較

BINARY

I、E、A

NLS_CREDIT

貸方の会計記号

NLS_TERRITORYから導出

E

NLS_CURRENCY

各国通貨記号

NLS_TERRITORYから導出

I、E、A

NLS_DATE_FORMAT

日付書式

NLS_TERRITORYから導出

I、E、A

NLS_DATE_LANGUAGE

曜日と月の名前に使用する言語

NLS_LANGUAGEから導出

I、E、A

NLS_DEBIT

借方の会計記号

NLS_TERRITORYから導出

E

NLS_DUAL_CURRENCY

第2通貨記号

NLS_TERRITORYから導出

I、E、A

NLS_ISO_CURRENCY

ISO国際通貨記号

NLS_TERRITORYから導出

I、E、A

NLS_LANG

関連項目: 「環境変数NLS_LANGを使用したロケールの選択」

言語、地域、文字セット

AMERICAN_AMERICA.

US7ASCII

E

NLS_LANGUAGE

言語

NLS_LANGから導出

I、A

NLS_LENGTH_SEMANTICS

文字列の処理方法

BYTE

I、E、A

NLS_LIST_SEPARATOR

リスト内項目の区切り文字

NLS_TERRITORYから導出

E

NLS_MONETARY_CHARACTERS

ドルとセント(または相当する通貨)に使用する通貨記号

NLS_TERRITORYから導出

E

NLS_NCHAR_CONV_EXCP

文字列型変換時のデータ消失のレポート

FALSE

I、A

NLS_NUMERIC_CHARACTERS

小数点記号および桁グループ・セパレータ

NLS_TERRITORYから導出

I、E、A

NLS_SORT

照合

NLS_LANGUAGEから導出

I、E、A

NLS_TERRITORY

地域

NLS_LANGから導出

I、A

NLS_TIMESTAMP_FORMAT

タイムスタンプ

NLS_TERRITORYから導出

I、E、A

NLS_TIMESTAMP_TZ_FORMAT

タイム・ゾーン付きのタイムスタンプ

NLS_TERRITORYから導出

I、E、A

3.2 環境変数NLS_LANGを使用したロケールの選択

ロケールとはシステムやプログラムを実行する言語的および文化的環境のことです。Oracle Databaseソフトウェアでロケール動作を指定する最も簡単な方法は、NLS_LANG環境パラメータを設定することです。このパラメータによって、クライアント・アプリケーションおよびデータベース・サーバーで使用される言語と地域が設定されます。また、クライアント・プログラムによって入力または表示されるデータの文字セットである、クライアントの文字セットも設定されます。

UNIXプラットフォーム上では、NLS_LANGは環境変数として設定されます。Windowsプラットフォームでは、NLS_LANGはレジストリ内で設定されます。

NLS_LANGパラメータには、3つのコンポーネント、language、territoryおよびcharsetがあります。このパラメータは、句読点を含めて次の書式で指定します。

NLS_LANG = language_territory.charset

たとえば、Oracle InstallerでNLS_LANGが移入されない場合、その値はデフォルトでAMERICAN_AMERICA.US7ASCIIとなります。この場合のlanguageはAMERICAN、territoryはAMERICA、character setはUS7ASCIIです。NLS_LANGおよびその他のNLSパラメータの値は、大/小文字を区別しません。

NLS_LANGパラメータの各コンポーネントによって、グローバリゼーション・サポート機能のサブセットの操作が制御されます。

  • language

    Oracle Databaseのメッセージ、ソート、曜日名および月名に使用する言語などの規則を指定します。各サポート対象言語には、AMERICANFRENCHまたはGERMANなどの一意の名前が付いています。languageの引数によって、territoryおよびcharacter setの引数にデフォルト値が指定されます。languageを指定しない場合、デフォルト値はAMERICANに設定されます。

  • territory

    デフォルトの日付、通貨単位および数値書式などの規則を指定します。各サポート対象地域には、AMERICAFRANCEまたはCANADAなどの一意の名前が付いています。territoryを指定しない場合、値はlanguageの値から導出されます。

  • charset

    クライアント・アプリケーションが使用する文字セット(通常はユーザーの端末の文字セットまたはOSの文字セットに対応するOracle Databaseの文字セット)を指定します。サポート対象の各文字セットには、US7ASCIIWE8ISO8859P1WE8DECWE8MSWIN1252またはJA16EUCなどの一意の頭字語が付いています。各言語には、その言語に対応したデフォルトの文字セットがあります。

    ノート:

    NLS_LANG定義のコンポーネントはすべてオプションです。未指定の項目にはデフォルト値が使用されます。territoryまたはcharsetを指定する場合は、先行デリミタを付ける必要があります(先行デリミタは、territoryの場合はアンダースコア(_)で、charsetの場合はピリオド(.)です)。先行デリミタを付けないと、値は言語名として解析されます。

    たとえば、NLS_LANGの地域部分のみを設定するには、書式NLS_LANG=_JAPANを使用します。

NLS_LANGの3つのコンポーネントは、次の例のように、様々な組合せで指定できます。

NLS_LANG = AMERICAN_AMERICA.WE8MSWIN1252

NLS_LANG = FRENCH_CANADA.WE8ISO8859P1

NLS_LANG = JAPANESE_JAPAN.JA16EUC

非論理的な組合せも設定できますが、正しく動作しません。たとえば、次の指定では、西ヨーロッパ諸国の文字セットを使用して日本語をサポートしようとしています。

NLS_LANG = JAPANESE_JAPAN.WE8ISO8859P1

WE8ISO8859P1文字セットでは日本語文字がサポートされないため、この定義をNLS_LANGに使用すると日本語データを格納および表示できません。

これ以降の内容は、次のとおりです。

3.2.1 NLS_LANGの値の指定

UNIXオペレーティング・システムのCシェル・セッション上では、次の例のような文を入力して、NLS_LANGの値を指定できます。

% setenv NLS_LANG FRENCH_FRANCE.WE8ISO8859P1

NLS_LANGは環境変数であるため、クライアント・アプリケーションによって起動時に読み込まれます。クライアントは、NLS_LANGによって定義された情報を、データベース・サーバーへの接続時にサーバーに送信します。

次の例では、日付および数値の書式がNLS_LANGパラメータによってどのように影響を受けるかを示します。

例3-1 NLS_LANGをAmerican_America.WE8ISO8859P1に設定する場合

言語がAMERICAN、地域がAMERICA、Oracle文字セットがWE8ISO8859P1となるように、NLS_LANGを設定します。

% setenv NLS_LANG American_America.WE8ISO8859P1

SELECT文を入力します。

SQL> SELECT last_name, hire_date, ROUND(salary/8,2) salary FROM employees;

結果は次のような出力になります。

LAST_NAME                 HIRE_DATE     SALARY
------------------------- --------- ----------
...
Sciarra                   30-SEP-05      962.5
Urman                     07-MAR-06        975
Popp                      07-DEC-07      862.5
...

例3-2 NLS_LANGをFrench_France.WE8ISO8859P1に設定する場合

言語がFRENCH、地域がFRANCE、Oracle Database文字セットがWE8ISO8859P1となるように、NLS_LANGを設定します。

% setenv NLS_LANG French_France.WE8ISO8859P1

例3-1に示した問合せでは、次の出力が戻されます。

LAST_NAME      HIRE_DATE     SALARY
-------------- ---------  ---------
...
Sciarra        30/09/05       962,5
Urman          07/03/06         975
Popp           07/12/07       862,5
...

日付書式と数値書式が変更されていることに注意してください。基礎となるデータは同じであるため、数値に変更はありません。

3.2.2 言語指定と地域指定のオーバーライド

NLS_LANGパラメータは、サーバー・セッション(SQLコマンドの実行など)とクライアント・アプリケーション(Oracle Databaseのツール製品での書式設定表示など)の両方で使用する言語と地域の環境を設定します。このパラメータを使用することで、データベースとクライアント・アプリケーションの言語環境が自動的に同じになります。

NLS_LANGパラメータのlanguageコンポーネントとterritoryコンポーネントによって、他の詳細なNLSパラメータ(日付書式、数字および言語ソートなど)のデフォルト値が決定されます。NLS_LANGパラメータがすでに設定されている場合は、これらの詳細パラメータをそれぞれクライアント環境で設定してデフォルト値をオーバーライドできます。

NLS_LANGパラメータを設定しない場合、サーバー・セッション環境は、初期化パラメータ・ファイルのNLS_LANGUAGENLS_TERRITORYおよび他のNLSインスタンスのパラメータの値によって初期化された状態のままです。これらのパラメータを変更して、インスタンスを再起動すると、デフォルト値を変更できます。

セッション中にNLS環境の動的な変更が必要な場合があります。その場合は、ALTER SESSION文を使用してNLS_LANGUAGENLS_TERRITORYおよび他のNLSパラメータを変更できます。

ノート:

クライアント文字セットの設定は、ALTER SESSION文では変更できません。

ALTER SESSION文が変更するのは、セッション環境のみです。ローカル・クライアントのNLS環境は、クライアントが新しい設定を明示的に取得してローカル環境を変更しないかぎり、変更されません。

3.2.3 ロケールのバリアント

Oracle Database 10gまでのOracleでは、言語と地域が別々に定義されていました。このため、地域定義はユーザーの言語設定から独立していました。Oracle Database 10g以降、ユーザーの言語設定に基づいて一部の地域に異なる日付、時刻、数値および通貨書式を使用できます。この種の言語依存の地域定義をロケールのバリアントと呼びます。

バリアントを正常に動作させるには、NLS_TERRITORYおよびNLS_LANGUAGEの両方を指定する必要があります。

次の表に、バリアントをサポートするように拡張されている地域を示します。

表3-3 Oracle Databaseのロケールのバリアント

Oracle Databaseの地域 Oracle Databaseの言語

BELGIUM

DUTCH

BELGIUM

FRENCH

BELGIUM

GERMAN

CANADA

FRENCH

CANADA

ENGLISH

DJIBOUTI

FRENCH

DJIBOUTI

ARABIC

FINLAND

FINLAND

FINLAND

SWEDISH

HONG KONG

TRADITIONAL CHINESE

HONG KONG

ENGLISH

INDIA

ENGLISH

INDIA

ASSAMESE

INDIA

BANGLA

INDIA

GUJARATI

INDIA

HINDI

INDIA

KANNADA

INDIA

MALAYALAM

INDIA

MARATHI

INDIA

ORIYA

INDIA

PUNJABI

INDIA

TAMIL

INDIA

TELUGU

LUXEMBOURG

GERMAN

LUXEMBOURG

FRENCH

SINGAPORE

ENGLISH

SINGAPORE

MALAY

SINGAPORE

SIMPLIFIED CHINESE

SINGAPORE

TAMIL

SWITZERLAND

GERMAN

SWITZERLAND

FRENCH

SWITZERLAND

ITALIAN

3.2.4 NLS_LANG設定とデータベース文字セットを一致させる必要があるかどうか

NLS_LANGの文字セットには、クライアントのオペレーティング・システムの文字セットの設定を反映する必要があります。たとえば、データベース文字セットがAL32UTF8で、クライアントのオペレーティング・システムがWindowsの場合、UTF8 WIN32クライアントはないため、NLS_LANGパラメータではクライアント文字セットとしてAL32UTF8を設定しないでください。かわりに、NLS_LANG設定にクライアントのコード・ページを反映する必要があります。たとえば、英語版Windowsクライアントでは、コード・ページは1252です。NLS_LANGの適切な設定は、AMERICAN_AMERICA.WE8MSWIN1252です。

NLS_LANGを適切に設定すると、クライアント・オペレーティング・システムの文字セットからデータベース文字セットへと適切に変換できます。これらの設定が同じときは、Oracle Databaseによって、送受信されるデータはデータベース文字セットと同一の文字セットでエンコードされているとみなされるため、文字セットの妥当性チェックや変換が行われない場合があります。このため、クライアントのコード・ページとデータベース文字セットが異なっていて、変換が必要な場合は、データが破損する可能性があります。

関連項目:

WindowsでNLS_LANGパラメータに一般に使用できる値の詳細は、『Oracle Databaseインストレーション・ガイド for Microsoft Windows』を参照してください。

3.3 文字セット・パラメータ

Oracleには、クライアントのOS文字セットがOracle NLSクライアントの文字セットと異なる場合に対処するために、環境変数NLS_OS_CHARSETが用意されています。

3.3.1 NLS_OS_CHARSET環境変数

クライアントのOS文字セットがNLS_LANG環境変数で指定されるOracle NLSクライアントの文字セットと異なる場合は、Oracleクライアントのインストール環境でNLS_OS_CHARSET環境変数を設定する必要があります。クライアントのOS文字セットは、マシン名、プログラムの実行ファイル名およびログインしているユーザー名などのOSフィールド内の文字を表すために使用される文字セットです。UNIXプラットフォームの場合、この文字セットは通常LANG環境変数またはLC_ALL環境変数で指定されます。NLS_OS_CHARSETを設定する場合の一例をあげると、LinuxクライアントのLANGまたはLC_ALLで指定されるロケールの文字セットがzh_CN(簡体字中国語)で、NLS_LANGで指定されるOracleクライアント・アプリケーションの文字セットがUTF8の場合です。この場合、NLS_OS_CHARSET変数を、対応するOracle文字セットZHT16GBKに設定する必要があります。

NLS_OS_CHARSET環境変数は、クライアントのOS文字セットに対応するOracleの文字セット名に設定する必要があります。

NLS_LANGがOS文字セットに対応する場合、NLS_OS_CHARSETを設定する必要はありません。WindowsプラットフォームではNLS_OS_CHARSETの設定は不要であり、無視されます。

3.4 NLSデータベース・パラメータ

CREATE DATABASE文の実行中に新しいデータベースが作成されると、NLS関連のデータベース構成が設定されます。現行のNLSインスタンス・パラメータは、データベース文字セットおよび各国語文字セットとともにデータ・ディクショナリに格納されます。NLSインスタンス・パラメータは、インスタンスの起動時に初期化パラメータ・ファイルから読み込まれます。

NLSパラメータの値は、次のいずれかを使用して検索できます。

3.4.1 NLSデータ・ディクショナリ・ビュー

アプリケーションでは、次のデータ・ディクショナリ・ビューに問い合せて、セッション、インスタンスおよびデータベースのNLSパラメータをチェックできます。

  • NLS_SESSION_PARAMETERSには、このビューに問合せ中のセッションのNLSパラメータとその値が表示されます。文字セットに関する情報は表示されません。

  • NLS_INSTANCE_PARAMETERSには、明示的に設定されている現行のNLSインスタンス・パラメータとその値が表示されます。

  • NLS_DATABASE_PARAMETERSには、データベースのNLSパラメータの値が表示されます。これらの値はデータベースに格納されます。

3.4.2 NLS動的パフォーマンス・ビュー

アプリケーションでは、次のNLS動的パフォーマンス・ビューをチェックできます。

  • V$NLS_VALID_VALUESには、NLSパラメータNLS_LANGUAGENLS_SORTNLS_TERRITORYおよびNLS_CHARACTERSETの値が表示されます。

  • V$NLS_PARAMETERSには、NLSパラメータNLS_CALENDARNLS_CHARACTERSETNLS_CURRENCYNLS_DATE_FORMATNLS_DATE_LANGUAGENLS_ISO_CURRENCYNLS_LANGUAGENLS_NUMERIC_CHARACTERSNLS_SORTNLS_TERRITORYNLS_NCHAR_CHARACTERSETNLS_COMPNLS_LENGTH_SEMANTICSNLS_NCHAR_CONV_EXPNLS_TIMESTAMP_FORMATNLS_TIMESTAMP_TZ_FORMATNLS_TIME_FORMATおよびNLS_TIME_TZ_FORMATの現行の値が表示されます。

3.4.3 OCINlsGetInfo()関数

ユーザー・アプリケーションでは、OCINlsGetInfo()関数を使用して、クライアントのNLS設定を問い合せることができます。

関連項目:

OCINlsGetInfo()の詳細は、「OCIでのロケール情報の取得」を参照してください

3.5 言語および地域のパラメータ

この項では、次のパラメータについて説明します。

3.5.1 NLS_LANGUAGE

プロパティ 説明

パラメータ・タイプ

文字列

パラメータの有効範囲

初期化パラメータおよびALTER SESSION

デフォルト値

NLS_LANGから導出

値の範囲

有効な任意の言語名

NLS_LANGUAGEは、次のセッション特性に対してデフォルトの規則を指定します。

  • サーバー・メッセージの言語

  • 曜日名と月名の言語およびその略称(SQL関数TO_CHARTO_DATEで指定されます)

  • AM、PM、ADおよびBCに相当する記号。(A.M.、P.M.、A.D.およびB.C.は、NLS_LANGUAGEAMERICANに設定されている場合のみ有効です。)

  • ORDER BYが指定されている場合の文字データのデフォルトのソート順序。(ORDER BYが指定されていないかぎり、GROUP BYでバイナリ・ソートが使用されます。)

  • 書込み方向

  • 肯定および否定応答の文字列(たとえばYESNO)

初期化パラメータ・ファイルのNLS_LANGUAGEに指定されている値は、そのインスタンス内のすべてのセッションに対するデフォルト値になります。たとえば、デフォルトのセッション言語をフランス語に指定するには、パラメータを次のように設定する必要があります。

NLS_LANGUAGE = FRENCH

次のサーバー・メッセージを考えてみます。

ORA-00942: table or view does not exist

言語がフランス語の場合は、次のサーバー・メッセージが表示されます。

ORA-00942: table ou vue inexistante

サーバーが使用するメッセージは、$ORACLE_HOME/product_name/mesgディレクトリにあるバイナリ形式ファイル、あるいはそれに相当するオペレーティング・システム用ファイルに格納されます。このファイルには、次のファイル名規則に従って、サポート対象言語ごとに1バージョンずつ、複数のバージョンが存在します。

<product_id><language_abbrev>.MSB

たとえば、ORAは製品ID(<product_id>)でFはフランス語の略称(<language_abbrev>)であるため、フランス語のサーバー・メッセージが含まれたファイルはoraf.msbと呼ばれます。product_namerdbmsであるため、$ORACLE_HOME/rdbms/mesgディレクトリにあります。

NLS_LANGがクライアント環境に指定されている場合、初期化パラメータ・ファイル内のNLS_LANGUAGEの値は接続時にオーバーライドされます。

メッセージは、言語とオペレーティング・システムに応じて、特定文字セットごとにこれらのファイルに格納されます。この文字セットがデータベース文字セットと異なる場合、メッセージ・テキストはデータベース文字セットに自動的に変換されます。クライアント文字セットがデータベース文字セットと異なる場合、メッセージ・テキストは、必要に応じてクライアント文字セットに変換されます。このように文字セット変換の制限に従うことによって、メッセージはユーザーの端末に正しく表示されます。

実際にインストールされる言語固有のバイナリ・メッセージ・ファイルは、製品のインストール時に指定する言語によって決定されます。インストールされるのは、英語のバイナリ・メッセージ・ファイルとユーザーが指定した言語固有のバイナリ・メッセージ・ファイルのみです。

NLS_LANGUAGEのデフォルト値が、オペレーティング・システム固有の値の場合があります。初期化パラメータ・ファイルで値を変更してインスタンスを再起動すると、NLS_LANGUAGEパラメータを変更できます。

関連項目:

NLS_LANGUAGEのデフォルト値の詳細は、各オペレーティング・システムのマニュアルを参照してください。

メッセージとテキストはすべて同じ言語にする必要があります。たとえば、Oracle Developerアプリケーションの実行時にユーザーが参照するメッセージとボイラープレート・テキストは、次の3つのソースから導出されます。

  • サーバーからのメッセージ

  • Oracle Formsによって生成されたメッセージとボイラープレート・テキスト

  • アプリケーションによって生成されたメッセージとボイラープレート・テキスト

最初の2種類のテキストに使用される言語は、NLS_LANGUAGEによって決定されます。アプリケーションは、そのメッセージとボイラープレート・テキストに使用する言語を受け持ちます。

次の例に、NLS_LANGUAGEを異なる値に設定した場合の動作を示します。

関連項目:

ALTER SESSION文の使用方法の詳細は、「セッション中のNLS_LANGUAGEおよびNLS_TERRITORYのデフォルト値のオーバーライド」を参照してください

例3-3 NLS_LANGUAGE=ITALIAN

ALTER SESSION文を使用して、NLS_LANGUAGEをイタリア語に設定します。

SQL> ALTER SESSION SET NLS_LANGUAGE=Italian;

SELECT文を入力します。

SQL> SELECT last_name, hire_date, ROUND(salary/8,2) salary FROM employees;

結果は次のような出力になります。

LAST_NAME      HIRE_DATE     SALARY
-------------- --------- ----------
...
Sciarra        30-SET-05      962.5
Urman          07-MAR-06        975
Popp           07-DIC-07      862.5
...

月名の略称にイタリア語が使用されていることに注意してください。

例3-4 NLS_LANGUAGE=GERMAN

ALTER SESSION文を使用して、言語をドイツ語に変更します。

SQL> ALTER SESSION SET NLS_LANGUAGE=German;

前述と同じSELECT文を入力します。

SQL> SELECT last_name, hire_date, ROUND(salary/8,2) salary FROM employees;

結果は次のような出力になります。

LAST_NAME      HIRE_DATE     SALARY
-------------- --------- ----------
...
Sciarra        30-SEP-05      962.5
Urman          07-MRZ-06        975
Popp           07-DEZ-07      862.5
...

月名の略称の言語が変更されていることに注意してください。

3.5.2 NLS_TERRITORY

プロパティ 説明

パラメータ・タイプ

文字列

パラメータの有効範囲

初期化パラメータおよびALTER SESSION

デフォルト値

NLS_LANGから導出

値の範囲

有効な任意の地域名

NLS_TERRITORYは、次のデフォルトの日付および数値の書式特性に関する規則を指定します。

  • 日付書式

  • 小数点記号および桁グループ・セパレータ

  • 各国通貨記号

  • ISO通貨記号

  • 第2通貨記号

  • 週の最初の曜日

  • 貸方および借方記号

  • ISO週フラグ

  • リスト・セパレータ

初期化パラメータ・ファイルのNLS_TERRITORYに指定されている値は、そのインスタンスに対するデフォルト値になります。たとえば、デフォルトをフランスに指定するには、パラメータを次のように設定する必要があります。

NLS_TERRITORY = FRANCE

地域がFRANCEの場合、数値は小数点文字にカンマを使用して書式設定されます。

初期化パラメータ・ファイルで値を変更してインスタンスを再起動すると、NLS_TERRITORYパラメータを変更できます。NLS_TERRITORYのデフォルト値が、オペレーティング・システム固有の値の場合があります。

NLS_LANGがクライアント環境に指定されている場合、初期化パラメータ・ファイル内のNLS_TERRITORYの値は接続時にオーバーライドされます。

地域は、ALTER SESSION文にNLS_TERRITORYの新しい値を指定することで、セッション中に動的に変更できます。NLS_TERRITORYを変更すると、すべての導出NLSセッション・パラメータは、新しい地域のデフォルト値に再設定されます。

セッション中に地域をフランスに変更するには、次のALTER SESSION文を発行します。

SQL> ALTER SESSION SET NLS_TERRITORY = France;

次の例に、NLS_TERRITORYNLS_LANGUAGEを異なる値に設定した場合の動作を示します。

関連項目:

ALTER SESSION文の使用方法の詳細は、「セッション中のNLS_LANGUAGEおよびNLS_TERRITORYのデフォルト値のオーバーライド」を参照してください

例3-5 NLS_LANGUAGE=AMERICAN、NLS_TERRITORY=AMERICA

次のSELECT文を入力します。

SQL> SELECT TO_CHAR(salary,'L99G999D99') salary FROM employees;

NLS_TERRITORYAMERICAに設定し、NLS_LANGUAGEAMERICANに設定すると、次のような結果が出力されます。

SALARY
--------------------
$24,000.00
$17,000.00
$17,000.00

例3-6 NLS_LANGUAGE=AMERICAN、NLS_TERRITORY=GERMANY

次のALTER SESSION文を使用して地域をドイツに変更します。

SQL> ALTER SESSION SET NLS_TERRITORY = Germany;
Session altered.

前述と同じSELECT文を入力します。

SQL> SELECT TO_CHAR(salary,'L99G999D99') salary FROM employees;

結果は次のような出力になります。

SALARY
--------------------
€24.000,00
€17.000,00
€17.000,00

通貨記号が$から€に変更されていることに注意してください。基礎となるデータは同じであるため、数値に変更はありません。

例3-7 NLS_LANGUAGE=GERMAN、NLS_TERRITORY=GERMANY

ALTER SESSION文を使用して言語をドイツ語に変更します。

SQL> ALTER SESSION SET NLS_LANGUAGE = German;
Session wurde geändert.

サーバー・メッセージがドイツ語で表示されることに注意してください。

前述と同じSELECT文を入力します。

SQL> SELECT TO_CHAR(salary,'L99G999D99') salary FROM employees;

例3-6と同じ結果が表示されます。

SALARY
--------------------
€24.000,00
€17.000,00
€17.000,00

例3-8 NLS_LANGUAGE=GERMAN、NLS_TERRITORY=AMERICA

次のALTER SESSION文を使用して地域をアメリカに変更します。

SQL> ALTER SESSION SET NLS_TERRITORY = America;
Session wurde geändert.

他の例と同じSELECT文を入力します。

SQL> SELECT TO_CHAR(salary,'L99G999D99') salary FROM employees;

結果は次のような出力になります。

SALARY
--------------------
$24,000.00
$17,000.00
$17,000.00

地域がドイツからアメリカに変更されたため、通貨記号が€から$に変更されていることに注意してください。

3.5.2.1 セッション中のNLS_LANGUAGEおよびNLS_TERRITORYのデフォルト値のオーバーライド

NLS_LANGUAGENLS_TERRITORYのデフォルト値および特定の書式設定パラメータのデフォルト値は、ALTER SESSION文を使用してセッション中にオーバーライドできます。

例3-9 NLS_LANG=ITALIAN_ITALY.WE8DEC

言語がイタリア語、地域がイタリア、文字セットがWE8DECになるように、環境変数NLS_LANGを設定します。

% setenv NLS_LANG Italian_Italy.WE8DEC

SELECT文を入力します。

SQL> SELECT last_name, hire_date, ROUND(salary/8,2) salary FROM employees;

結果は次のような出力になります。

LAST_NAME      HIRE_DATE     SALARY
-------------- --------- ----------
...
Sciarra        30-SET-05      962,5
Urman          07-MAR-06        975
Popp           07-DIC-07      862,5
...

月の略称の言語と小数点文字に注意してください。

例3-10 言語、日付書式および小数点文字の変更

ALTER SESSION文を使用して、言語、日付書式および小数点文字を変更します。

SQL> ALTER SESSION SET NLS_LANGUAGE=german;

Session wurde geändert.

SQL> ALTER SESSION SET NLS_DATE_FORMAT='DD.MON.YY';

Session wurde geändert.

SQL> ALTER SESSION SET NLS_NUMERIC_CHARACTERS='.,';

Session wurde geändert.

例3-9に示したSELECT文を入力します。

SQL> SELECT last_name, hire_date, ROUND(salary/8,2) salary FROM employees;

結果は次のような出力になります。

LAST_NAME      HIRE_DATE     SALARY
-------------- --------- ----------
...
Sciarra        30.SEP.05      962.5
Urman          07.MRZ.06        975
Popp           07.DEZ.07      862.5
...

月の略称がドイツ語で、小数点文字がピリオドであることに注意してください。

環境変数NLS_LANGの動作によって、各セッションのデータベースの言語環境が暗黙的に決定されます。セッションでのデータベース接続時に、ALTER SESSION文が自動的に実行され、データベース・パラメータNLS_LANGUAGEおよびNLS_TERRITORYの値が、NLS_LANGlanguageおよびterritory引数で指定された値に設定されます。NLS_LANGが定義されていない場合、ALTER SESSION文は暗黙的に実行されません。

NLS_LANGが定義されている場合は、セッションの接続先(直接接続と間接接続の両方)インスタンスすべてに対して、ALTER SESSION文が暗黙的に実行されます。NLSパラメータの値が、ALTER SESSIONによってセッション中に明示的に変更されると、その変更内容は、ユーザー・セッションの接続先のインスタンスすべてに反映されます。

3.6 日付および時間を指定するパラメータ

Oracle Databaseでは、日付と時刻の表示を制御できます。この項では、次の項目について説明します。

3.6.1 日付書式

次の表に、Oracle Databaseの様々な日付書式を示します。

表3-4 日付書式

説明

エストニア

dd.mm.yyyy

28.02.2003

ドイツ

dd-mm-rr

28-02-03

Japan

rr-mm-dd

03-02-28

英国

dd-mon-rr

28-Feb-03

米国

dd-mon-rr

28-Feb-03

この項では、次のパラメータについて説明します。

3.6.1.1 NLS_DATE_FORMAT
プロパティ 説明

パラメータ・タイプ

文字列

パラメータの有効範囲

初期化パラメータ、環境変数およびALTER SESSION

デフォルト値

NLS_TERRITORYから導出

値の範囲

有効な日付書式マスク

NLS_DATE_FORMATパラメータは、TO_CHAR関数およびTO_DATE関数で使用するデフォルトの日付書式を定義します。NLS_TERRITORYパラメータは、NLS_DATE_FORMATのデフォルト値を決定します。NLS_DATE_FORMATの値には、有効な任意の日付書式マスクを指定できます。たとえば、次のようにします。

NLS_DATE_FORMAT = "MM/DD/YYYY"

日付書式に文字列リテラルを追加する場合は、その文字列リテラルを二重引用符で囲みます。日付書式に二重引用符を使用する場合は、値全体を一重引用符で囲む必要があることに注意してください。たとえば、次のようにします。

NLS_DATE_FORMAT = '"Date: "MM/DD/YYYY'
  • 初期化パラメータ・ファイル内で値を変更してから、インスタンスを再起動します。

  • ALTER SESSION SET NLS_DATE_FORMAT文を使用します。

    関連項目:

    日付書式要素とALTER SESSION文の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

表または索引が日付列でパーティション化されている場合や、NLS_DATE_FORMATで指定した日付書式では年の最初の2桁が指定されない場合は、年に4文字の書式マスクを指定してTO_DATE関数を使用する必要があります。

たとえば、次のようにします。

TO_DATE('11-jan-1997', 'dd-mon-yyyy')

関連項目:

表および索引をパーティション化する方法とTO_DATEの使用方法の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

例3-11 ローマ数字を表示する日付書式の設定

デフォルトの日付書式を設定して、月をローマ数字で表示するには、初期化パラメータ・ファイルに次の行を加えます。

NLS_DATE_FORMAT = "DD RM YYYY"

次のSELECT文を入力します。

SQL> SELECT TO_CHAR(SYSDATE) currdate FROM DUAL;

今日の日付が1997年2月12日の場合は、次の出力が表示されます。

CURRDATE
---------
12 II 1997

NLS_DATE_FORMATの値は、内部日付書式で格納されます。各書式要素は2バイトを占め、各文字列は、文字列のバイト数に終了記号の1バイト数を加えたバイト数を占めます。また、書式マスク全体には2バイトの終了記号があります。たとえば、MM/DD/YYは、内部で14バイトを占めます。これは、書式マスクが3つの書式要素(月、日および年)、2つの3バイト文字列(2個のスラッシュ)および2バイトの終了記号で構成されるためです。NLS_DATE_FORMATの値の書式は、24バイト以内で設定する必要があります。

NLS_DATE_FORMATのデフォルト値は、次の方法で変更できます。

3.6.1.2 NLS_DATE_LANGUAGE
プロパティ 説明

パラメータ・タイプ

文字列

パラメータの有効範囲

初期化パラメータ、環境変数、ALTER SESSIONおよびSQL関数

デフォルト値

NLS_LANGUAGEから導出

値の範囲

有効な任意の言語名

NLS_DATE_LANGUAGEパラメータは、TO_CHARおよびTO_DATE 関数で生成される曜日と月名の言語を指定します。NLS_DATE_LANGUAGEによって、NLS_LANGUAGEで暗黙的に指定された言語がオーバーライドされます。NLS_DATE_LANGUAGEの構文は、NLS_LANGUAGEパラメータの構文と同じで、サポート対象言語がすべて有効値です。

また、NLS_DATE_LANGUAGE によって、次に表記に使用する言語が決定されます。

  • TO_CHARおよびTO_DATE関数で戻される月名と曜日名の略称

  • デフォルトの日付書式(NLS_DATE_FORMAT)で使用される月名と曜日名の略称

  • AM、PM、ADおよびBCの略称

例3-12 NLS_DATE_LANGUAGE=FRENCH、月名および曜日名

NLS_DATE_LANGUAGEの使用方法の例として、日付の言語をフランス語に設定します。

SQL> ALTER SESSION SET NLS_DATE_LANGUAGE = FRENCH;

SELECT文を入力します。

SQL> SELECT TO_CHAR(SYSDATE, 'Day:Dd Month yyyy') FROM DUAL;

結果は次のような出力になります。

TO_CHAR(SYSDATE,'DAY:DDMONTHYYYY')
------------------------------------------------------------
Vendredi:07 Décembre  2001

TO_CHAR関数を使用して表記される数字には、常に英語表記が使用されます。たとえば、次のSELECT文を入力します。

SQL> SELECT TO_CHAR(TO_DATE('12-Oct.-2001'),'Day: ddspth Month') FROM DUAL;

結果は次のような出力になります。

TO_CHAR(TO_DATE('12-OCT.-2001'),'DAY:DDSPTHMONTH')
--------------------------------------------------------------------
Vendredi: twelfth Octobre

例3-13 NLS_DATE_LANGUAGE=FRENCH、月名および曜日名の略称

月名と曜日名の略称は、NLS_DATE_LANGUAGEによって決定されます。次のSELECT文を入力します。

SQL> SELECT TO_CHAR(SYSDATE, 'Dy:dd Mon yyyy') FROM DUAL;

結果は次のような出力になります。

TO_CHAR(SYSDATE,'DY:DDMO
------------------------
Ve:07 Déc. 2001

例3-14 NLS_DATE_LANGUAGE=FRENCH、デフォルトの日付書式

デフォルトの日付書式では、NLS_DATE_LANGUAGEによって決定された月名の略称が使用されます。たとえば、デフォルトの日付書式がDD-MON-YYYYの場合、日付は次のように挿入されます。

SQL> INSERT INTO tablename VALUES ('12-Févr.-1997');

3.6.2 時刻書式

次の表に、Oracle Databaseの様々な時刻書式を示します。

表3-5 時刻書式

説明

エストニア

hh24:mi:ss

13:50:23

ドイツ

hh24:mi:ss

13:50:23

Japan

hh24:mi:ss

13:50:23

英国

hh24:mi:ss

13:50:23

米国

hh:mi:ssxff am

1:50:23.555 PM

この項では、次のパラメータについて説明します。

3.6.2.1 NLS_TIMESTAMP_FORMAT
プロパティ 説明

パラメータ・タイプ

文字列

パラメータの有効範囲

初期化パラメータ、環境変数およびALTER SESSION

デフォルト値

NLS_TERRITORYから導出

値の範囲

有効な日時書式マスク

NLS_TIMESTAMP_FORMATは、TIMESTAMPおよびTIMESTAMP WITH LOCAL TIME ZONEデータ型のデフォルトの日付書式を定義します。次の例に、NLS_TIMESTAMP_FORMATの値を示します。

NLS_TIMESTAMP_FORMAT  = 'YYYY-MM-DD HH:MI:SS.FF'

例3-15 タイムスタンプ書式

SQL> SELECT TO_TIMESTAMP('11-nov-2000 01:00:00.336', 'dd-mon-yyyy hh:mi:ss.ff') FROM DUAL;

結果は次のような出力になります。

TO_TIMESTAMP('11-NOV-200001:00:00.336','DD-MON-YYYYHH:MI:SS.FF')
---------------------------------------------------------------------------
2000-11-11 01:00:00.336000000

NLS_TIMESTAMP_FORMATの値を指定するには、その値を初期化パラメータ・ファイルに設定します。設定した値は、クライアントのクライアント環境変数として指定できます。

また、次の方法でNLS_TIMESTAMP_FORMATの値を変更することもできます。

  • 初期化パラメータ・ファイル内で値を変更してから、インスタンスを再起動します。

  • ALTER SESSION SET NLS_TIMESTAMP_FORMAT文を使用します。

    関連項目:

    TO_TIMESTAMP関数とALTER SESSION文の詳細は、『Oracle Database SQL言語リファレンス』を参照してください

3.6.2.2 NLS_TIMESTAMP_TZ_FORMAT
プロパティ 説明

パラメータ・タイプ

文字列

パラメータの有効範囲

初期化パラメータ、環境変数およびALTER SESSION

デフォルト値

NLS_TERRITORYから導出

値の範囲

有効な日時書式マスク

NLS_TIMESTAMP_TZ_FORMATは、TIMESTAMPおよびTIMESTAMP WITH LOCAL TIME ZONEデータ型のデフォルトの日付書式を定義します。これにはTO_CHARおよびTO_TIMESTAMP_TZファンクションが使用されます。

NLS_TIMESTAMP_TZ_FORMATの値を指定するには、その値を初期化パラメータ・ファイルに設定します。設定した値は、クライアントのクライアント環境変数として指定できます。

例3-16 NLS_TIMESTAMP_TZ_FORMATの設定

書式の値は引用符で囲む必要があります。たとえば、次のようにします。

NLS_TIMESTAMP_TZ_FORMAT  = 'YYYY-MM-DD HH:MI:SS.FF TZH:TZM'

次のTO_TIMESTAMP_TZ関数の例では、NLS_TIMESTAMP_TZ_FORMATに指定された書式の値を使用しています。

SQL> SELECT TO_TIMESTAMP_TZ('2000-08-20, 05:00:00.55 America/Los_Angeles', 'yyyy-mm-dd hh:mi:ss.ff TZR') FROM DUAL;

結果は次のような出力になります。

TO_TIMESTAMP_TZ('2000-08-20,05:00:00.55AMERICA/LOS_ANGELES','YYYY-MM-DDHH:M
---------------------------------------------------------------------------
2000-08-20 05:00:00.550000000 -07:00

また、次の方法でNLS_TIMESTAMP_TZ_FORMATの値を変更することもできます。

3.7 カレンダ定義

この項には次のトピックが含まれます:

3.7.1 カレンダ書式

次のカレンダ情報が地域別に格納されます。

3.7.1.1 週の最初の曜日

一部の文化では、日曜日を最初の曜日とみなしています。また、月曜日を最初の曜日とみなす文化もあります。ドイツのカレンダは、次の表に示すように月曜日から始まります。

表3-6 ドイツのカレンダの例: 1998年3月

-

-

-

-

-

-

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

-

-

-

-

-

週の最初の曜日は、NLS_TERRITORYパラメータによって決定されます。

関連項目:

「NLS_TERRITORY」

3.7.1.2 年の最初の暦週

一部の国では、週番号を使用してスケジューリング、計画および会計処理を行います。Oracle Databaseでは、この規則をサポートしています。ISO規格では、暦年の週番号とは異なる週番号を使用できます。たとえば、1988年1月1日は、1987年のISO週番号53になります。ISOの週は、常に月曜日に始まって日曜日に終わります。

  • 1月1日が金曜日、土曜日または日曜日の場合、1月1日を含むISOの週は、その週の大半の日が前年に属するため、前年の最後の週になります。

  • 1月1日が月曜日、火曜日、水曜日または木曜日の場合は、1月1日を含むISOの週は、その週の大半の日が新しい年に属するため、新しい年の最初の週になります。

ISO規格をサポートするために、Oracle DatabaseにはIW日付書式要素が用意されています。これによりISOの週番号が戻されます。

次の表に、暦年の第1週に1月1日を含めて4日以上含まれている場合の例を示します。1月1日を含む週は、1998年のISOの第1週となります。

表3-7 年のISOの第1週: 例1、1998年1月

ISO週

-

-

-

1

2

3

4

1998年のISOの第1週

5

6

7

8

9

10

11

1998年のISOの第2週

12

13

14

15

16

17

18

1998年のISOの第3週

19

20

21

22

23

24

25

1998年のISOの第4週

26

27

28

29

30

31

-

1998年のISOの第5週

次の表に、暦年の第1週に含まれる日付が1月1日を含めて3日以内の場合の例を示します。1月1日を含む週は1998年のISOの第53週となり、次の週は1999年のISOの第1週となります。

表3-8 年のISOの第1週: 例2、1999年1月

ISO週

-

-

-

-

1

2

3

1998年のISOの第53週

4

5

6

7

8

9

10

1999年のISOの第1週

11

12

13

14

15

16

17

1999年のISOの第2週

18

19

20

21

22

23

24

1999年のISOの第3週

25

26

27

28

29

30

31

1999年のISOの第4週

年の最初の暦週は、NLS_TERRITORYパラメータによって決定されます。

関連項目:

「NLS_TERRITORY」

3.7.1.3 1年の日数と月数

Oracle Databaseでは、デフォルトのグレゴリオ暦の他に、次の6つの暦法をサポートしています。

  • Japanese Imperial(日本の元号暦): 月数と日数はグレゴリオ暦と同じですが、年は元号ごとに始まります。

  • ROC Official(台湾暦): 月数と日数はグレゴリオ暦と同じですが、年は台湾の建国年から始まります。

  • Persian(ペルシャ暦): 最初の6か月の日数はそれぞれ31日、次の5か月はそれぞれ30日、最後の月は29日または30日(うるう年)です。

  • Thai Buddha(タイ仏教暦): 仏教のカレンダを使用します。

  • Arabic Hijrah(イスラム歴): 月数は12で、日数は354または355です。

  • English Hijrah(英語版イスラム歴): 月数は12で、日数は354または355です。

  • エチオピア歴: 30日の月が12か月あり、その後に5日間または6日間(うるう年)の13か月めがあります。4年おきに、13月に6日目が追加されます。

暦法はNLS_CALENDARパラメータで指定します。

関連項目:

「NLS_CALENDAR」

3.7.1.4 紀元の年

イスラム暦は、ヒジュラ紀元の年から始まります。

日本の元号暦は天皇が即位した最初の年から始まります。たとえば、1998年は平成10年となります。ただし、日本では、グレゴリオ暦も広く理解されているので、1998年を表現するために98年と平成10年の両方が使用されます。

3.7.2 NLS_CALENDAR

プロパティ 説明

パラメータ・タイプ

文字列

パラメータの有効範囲

初期化パラメータ、環境変数、ALTER SESSIONおよびSQL関数

デフォルト値

Gregorian(グレゴリオ暦)

値の範囲

有効なカレンダ書式名

世界中で様々な暦法が使用されています。NLS_CALENDARによって、Oracle Databaseで使用する暦法が指定されます。

NLS_CALENDARパラメータには、次の値のいずれかを指定できます。

  • Arabic Hijrah (イスラム暦)

  • English Hijrah (英語版イスラム暦)

  • Ethiopian (エチオピア暦)

  • Gregorian(グレゴリオ暦)

  • Japanese Imperial (日本の元号暦)

  • ペルシア語

  • ROC Official(台湾暦)

  • Thai Buddha (タイ仏教暦)

    関連項目:

    暦法、そのデフォルトの日付書式および日付表示に使用される文字セットのリストは、「ロケール・データ」を参照してください

例3-17 NLS_CALENDAR='English Hijrah'

NLS_CALENDARをEnglish Hijrahに設定します。

SQL> ALTER SESSION SET NLS_CALENDAR='English Hijrah';

SELECT文を入力してSYSDATEを表示します。

SQL> SELECT SYSDATE FROM DUAL;

結果は次のような出力になります。

SYSDATE
--------------------
24 Ramadan     1422

3.8 数値パラメータとリスト・パラメータ

この項には次のトピックが含まれます:

3.8.1 数値書式

データベースでは、数字列を正確に解釈するために、各セッションで使用される数値書式設定の規則を認識している必要があります。たとえば、数値の入力時に小数点文字としてピリオドまたはカンマのどちらを使用するか(234.00または234,00)などを認識している必要があります。同じように、アプリケーションでは、数値情報をクライアント側の書式で表示できる必要があります。

次の表に数値書式の例を示します。

表3-9 数値書式の例

数値書式

エストニア

1 234 567,89

ドイツ

1.234.567,89

Japan

1,234,567.89

英国

1,234,567.89

米国

1,234,567.89

数値書式はNLS_TERRITORYパラメータの設定から導出されますが、NLS_NUMERIC_CHARACTERSパラメータでオーバーライドできます。

関連項目:

「NLS_TERRITORY」

3.8.2 NLS_NUMERIC_CHARACTERS

プロパティ 説明

パラメータ・タイプ

文字列

パラメータの有効範囲

初期化パラメータ、環境変数、ALTER SESSIONおよびSQL関数

デフォルト値

特定地域に対するデフォルトの小数点文字とグループ・セパレータ

値の範囲

2つの有効な数字

このパラメータでは、小数点文字とグループ・セパレータを指定します。グループ・セパレータとは、千や100万などを示すために整数グループを区切る文字です。この文字はG数値書式マスクで戻されます。小数点文字は、数値の整数部と小数部を区切ります。NLS_NUMERIC_CHARACTERSを設定するとNLS_TERRITORYの設定から導出される値がオーバーライドされます。

任意の文字を、小数点文字またはグループ・セパレータに指定できます。これらの2つの文字はシングルバイトで、互いに異なる文字である必要があります。これらの文字に、数字、プラス(+)、ハイフン(-)または不等号(<、>)は使用できません。どちらかの文字を空白にすることができます。

例3-18 NLS_NUMERIC_CHARACTERSの設定

小数点文字をカンマに、グループ・セパレータをピリオドに設定するには、NLS_NUMERIC_CHARACTERSを次のように定義します。

SQL> ALTER SESSION SET NLS_NUMERIC_CHARACTERS = ",.";

SQL文には、数値リテラルまたはテキスト・リテラルを表す数値を組み込めます。数値リテラルは引用符で囲みません。数値リテラルはSQL言語構文の一部で、小数点文字として常にドットを使用し、グループ・セパレータは含まれません。テキスト・リテラルは引用符で囲みます。テキスト・リテラルは、必要に応じて、現行のNLS設定に従って、暗黙的または明示的に数値に変換されます。

次のSELECT文は、ALTER SESSION文で指定された小数点文字とグループ・セパレータを使用して数値4000の書式を設定します。

SQL> SELECT TO_CHAR(4000, '9G999D99') FROM DUAL;

結果は次のような出力になります。

TO_CHAR(4
---------
 4.000,00

NLS_NUMERIC_CHARACTERSのデフォルト値は次の方法で変更できます。

  • 初期化パラメータ・ファイルでNLS_NUMERIC_CHARACTERSの値を変更してから、インスタンスを再起動します。

  • このパラメータの値をセッション中に変更するには、ALTER SESSION文を使用します。

    関連項目:

    ALTER SESSION文の詳細は、『Oracle Database SQL言語リファレンス』を参照してください

3.8.3 NLS_LIST_SEPARATOR

プロパティ 説明

パラメータ・タイプ

文字列

パラメータの有効範囲

環境変数

デフォルト値

NLS_TERRITORYから導出

値の範囲

有効な任意の文字

NLS_LIST_SEPARATORは、値リストの値を区切るために使用する文字を指定します(通常は,.;または:)。このパラメータのデフォルト値は、NLS_TERRITORYの値から導き出されます。たとえば、1から5の数値のリストは、1,2,3,4,5、1.2.3.4.5、1;2;3;4;5または1:2:3:4:5と表すことができます。

指定する文字はシングルバイトにする必要があります。数値の小数点文字、通貨の小数点文字、数字、プラス(+)、ハイフン(-)、不等号(<、>)またはピリオド(.)は、いずれも使用できません。

3.9 通貨パラメータ

この項には次のトピックが含まれます:

3.9.1 通貨書式

世界中で様々な通貨書式が使用されています。標準的なものの一部を次の表に示します。

表3-10 通貨書式の例

エストニア

1 234,56 kr

ドイツ

1.234,56€

Japan

©1,234.56

英国

£1,234.56

米国

$1,234.56

3.9.2 NLS_CURRENCY

プロパティ 説明

パラメータ・タイプ

文字列

パラメータの有効範囲

初期化パラメータ、環境変数、ALTER SESSIONおよびSQL関数

デフォルト値

NLS_TERRITORYから導出

値の範囲

有効な通貨記号文字列

NLS_CURRENCYでは、L数値書式マスクで戻される文字列の各国通貨記号を指定します。NLS_CURRENCYを設定すると、NLS_TERRITORYで暗黙的に定義された設定がオーバーライドされます。

例3-19 各国通貨記号の表示

サンプル・スキーマであるoeスキーマに接続します。

SQL> connect oe/oe
Connected.

次の例のようなSELECT文を入力します。

SQL> SELECT TO_CHAR(order_total, 'L099G999D99') "total" FROM orders
     WHERE order_id > 2450;

結果は次のような出力になります。

total
---------------------
          $078,279.60
          $006,653.40
          $014,087.50
          $010,474.60
          $012,589.00
          $000,129.00
          $003,878.40
          $021,586.20

NLS_CURRENCYのデフォルト値は次の方法で変更できます。

  • 初期化パラメータ・ファイル内で値を変更してから、インスタンスを再起動します。

  • ALTER SESSION文を使用します。

    関連項目:

    ALTER SESSION文の詳細は、『Oracle Database SQL言語リファレンス』を参照してください

3.9.3 NLS_ISO_CURRENCY

プロパティ 説明

パラメータ・タイプ

文字列

パラメータの有効範囲

初期化パラメータ、環境変数、ALTER SESSIONおよびSQL関数

デフォルト値

NLS_TERRITORYから導出

値の範囲

有効な任意の文字列

NLS_ISO_CURRENCYでは、C数値書式マスクで戻される文字列の各国通貨記号を指定します。NLS_ISO_CURRENCYを設定すると、NLS_TERRITORYで暗黙的に定義された設定がオーバーライドされます。

各国通貨記号は不明確な場合があります。たとえば、ドル記号($)は米国ドルを指すこともオーストラリア・ドルを指すこともあります。ISO仕様には、特定の地域または国に対して固有の通貨記号が定義されています。たとえば、米国ドルに対するISO通貨記号はUSDです。オーストラリア・ドルに対するISO通貨記号はAUDです。

次の表に、その他のISO通貨記号を示します。

表3-11 ISO通貨の例

エストニア

1 234 567,89 EEK

ドイツ

1.234.567,89 EUR

Japan

1,234,567.89 JPY

英国

1,234,567.89 GBP

米国

1,234,567.89 USD

NLS_ISO_CURRENCYの構文はNLS_TERRITORYパラメータの構文と同じで、サポート対象地域すべてが有効値です。

例3-20 NLS_ISO_CURRENCYの設定

この例では、サンプル・スキーマ内でoe/oeとして接続しているとします。

フランス用のISO通貨記号を指定するには、NLS_ISO_CURRENCYを次のように設定します。

SQL> ALTER SESSION SET NLS_ISO_CURRENCY = FRANCE;

SELECT文を入力します。

SQL> SELECT TO_CHAR(order_total, 'C099G999D99') "TOTAL" FROM orders
     WHERE customer_id = 146;

結果は次のような出力になります。

TOTAL
------------------
EUR017,848.20
EUR027,455.30
EUR029,249.10
EUR013,824.00
EUR000,086.00

NLS_ISO_CURRENCYのデフォルト値は次の方法で変更できます。

  • 初期化パラメータ・ファイル内で値を変更してから、インスタンスを再起動します。

  • ALTER SESSION文を使用します。

    関連項目:

    ALTER SESSION文の詳細は、『Oracle Database SQL言語リファレンス』を参照してください

3.9.4 NLS_DUAL_CURRENCY

プロパティ 説明

パラメータ・タイプ

文字列

パラメータの有効範囲

初期化パラメータ、環境変数、ALTER SESSIONおよびSQL関数

デフォルト値

NLS_TERRITORYから導出

値の範囲

有効な任意の記号

NLS_DUAL_CURRENCYを使用すると、NLS_TERRITORYで暗黙的に定義されたデフォルトの第2通貨記号がオーバーライドされます。

NLS_DUAL_CURRENCYは、ユーロ移行期間中にユーロ通貨記号をサポートするために導入されました。ユーロ記号をサポートしている文字セットについては、表A-8を参照してください。

3.9.5 Oracle Databaseのユーロ・サポート

欧州通貨連合(European Monetary Union: EMU)の12の加盟国は、自国通貨としてユーロを使用しています。NLS_TERRITORYを対応するEMU加盟国(オーストリア、ベルギー、フィンランド、フランス、ドイツ、ギリシャ、アイルランド、イタリア、ルクセンブルグ、オランダ、ポルトガルおよびスペイン)に設定すると、NLS_CURRENCYおよびNLS_DUAL_CURRENCYのデフォルト値がEURに設定されます。

移行期間(1999から2001年)中は、Oracle Database 8i以上のOracle Databaseに次のユーロ・サポート機能が提供されていました。

  • NLS_CURRENCYが各国の1次通貨として定義されていました。

  • NLS_ISO_CURRENCYが、特定の地域のISO通貨コードとして定義されていました。

  • NLS_DUAL_CURRENCYが、特定の地域の2次通貨記号(通常はユーロ)として定義されていました。

Oracle Database 9iリリース2からは、NLS_ISO_CURRENCYの値に従って、ユーロを使用するEMU加盟国用のISO通貨記号がEURに設定されます。たとえば、NLS_ISO_CURRENCYFRANCEに設定されているとします。次のSELECT文を入力します。

SQL> SELECT TO_CHAR(order_total, 'C099G999D99') "TOTAL" FROM orders 
     WHERE customer_id=116;

結果は次のような出力になります。

TOTAL
-------
EUR006,394.80
EUR011,097.40
EUR014,685.80
EUR000,129.00 

廃止になった各国通貨記号を引き続き使用する必要がある場合は、それをサーバー上では初期化ファイルのパラメータとして、クライアント上では環境変数として定義することで、NLS_DUAL_CURRENCYまたはNLS_CURRENCYのデフォルトをオーバーライドできます。

ノート:

NLS_CURRENCYまたはNLS_DUAL_CURRENCYを有効にするには、クライアント上でNLS_LANGも設定する必要があります。

NLS_ISO_CURRENCYの値から導出されるISO通貨記号はオーバーライドできません。

3.9.6 NLS_MONETARY_CHARACTERS

プロパティ 説明

パラメータ・タイプ

文字列

パラメータの有効範囲

環境変数

デフォルト値

NLS_TERRITORYから導出

値の範囲

有効な任意の文字

NLS_MONETARY_CHARACTERSでは、通貨式で数値グループを区切る文字を指定します。たとえば、地域が米国の場合、3桁のセパレータはカンマで、小数点セパレータはピリオドです。

3.9.7 NLS_CREDIT

プロパティ 説明

パラメータ・タイプ

文字列

パラメータの有効範囲

環境変数

デフォルト値

NLS_TERRITORYから導出

値の範囲

最大9バイト(NULLを含まない)の任意の文字列

NLS_CREDITは、財務レポートで貸方を表示する記号を設定します。このパラメータのデフォルト値は、NLS_TERRITORYによって決定されます。たとえば、空白はNLS_CREDITの有効な値です。

このパラメータが指定できるのは、クライアント環境のみです。

このパラメータは、OCIGetNlsInfo()関数を使用して取得できます。

3.9.8 NLS_DEBIT

プロパティ 説明

パラメータ・タイプ

文字列

パラメータの有効範囲

環境変数

デフォルト値

NLS_TERRITORYから導出

値の範囲

最大9バイト(NULLを含まない)の任意の文字列

NLS_DEBITは、財務レポートで貸方を表示する記号を設定します。このパラメータのデフォルト値は、NLS_TERRITORYによって決定されます。たとえば、マイナス符号(-)は、NLS_DEBITの有効な値です。

このパラメータが指定できるのは、クライアント環境のみです。

このパラメータは、OCIGetNlsInfo()関数を使用して取得できます。

3.10 言語ソート・パラメータ

言語ソート・パラメータを使用して、データのソート方法を選択できます。

この項には次のトピックが含まれます:

3.10.1 NLS_SORT

プロパティ 説明

パラメータ・タイプ

文字列

パラメータの有効範囲

初期化パラメータ、環境変数、ALTER SESSIONおよびSQL関数

デフォルト値

NLS_LANGUAGEから導出

値の範囲

BINARYまたは有効な言語照合名

NLS_SORTは、文字データの一連の照合ルールおよび比較規則を指定します。NLS_LANGUAGEから導出されるデフォルト値をオーバーライドします。

NLS_SORTには、次の値のいずれかが含まれます。

NLS_SORT = BINARY | collation_name

BINARYはバイナリ照合を指定します。collation_nameは名前付き言語照合を指定します。

例3-21 NLS_SORTの設定

Germanという言語照合を指定するには、NLS_SORTを次のように設定します。

NLS_SORT = German

ノート:

NLS_SORTパラメータをBINARYに設定すると、オプティマイザは、索引スキャンを選択することで、ソート操作を行わずにORDER BY句を実行する場合があります。

NLS_SORTを言語照合に設定すると、NLS_SORTで指定された言語照合用の言語索引が存在しない場合は、ORDER BY句を実行するためにソート操作が必要になります。

NLS_SORTで指定された言語照合に対応する言語索引が存在する場合、オプティマイザは、索引スキャンを選択することで、ソート操作を行わずにORDER BY句を実行する場合があります。

NLS_SORTのデフォルト値は、次の方法で変更できます。

3.10.2 NLS_COMP

プロパティ 説明

パラメータ・タイプ

文字列

パラメータの有効範囲

初期化パラメータ、環境変数およびALTER SESSION

デフォルト値

BINARY

値の範囲

BINARYLINGUISTICまたはANSI

NLS_COMPの値は、決定された照合がUSING_NLS_COMPであるSQL操作の比較動作に影響を与えます。

3.11 文字セット変換パラメータ

この項には次のトピックが含まれます:

3.11.1 NLS_NCHAR_CONV_EXCP

プロパティ 説明

パラメータ・タイプ

文字列

パラメータの有効範囲

初期化パラメータおよびALTER SESSION

デフォルト値

FALSE

値の範囲

TRUEまたはFALSE

NLS_NCHAR_CONV_EXCPは、NCHAR/NVARCHARデータとCHAR/VARCHAR2データの間で暗黙的または明示的な文字列型の変換時にデータが消失した場合に、エラーをレポートするかどうかを決定します。デフォルト値の場合、エラーはレポートされません。

関連項目:

文字セット変換中のデータ消失の詳細は、「文字セットの移行」を参照してください

3.12 長さセマンティクス

この項には次のトピックが含まれます:

3.12.1 NLS_LENGTH_SEMANTICS

プロパティ 説明

パラメータ・タイプ

文字列

パラメータの有効範囲

環境変数、初期化パラメータおよびALTER SESSION

デフォルト値

BYTE

値の範囲

BYTEまたはCHAR

デフォルトでは、文字データ型CHARおよびVARCHAR2は、文字単位ではなくバイト単位で指定します。したがって、表定義でCHAR(20)と指定すると、文字データを格納するために20バイトが割り当てられます。

データベース文字セットでシングルバイト文字コード体系が使用されている場合は、文字数がバイト数と同じであるため、このような指定は適切に処理されます。データベース文字セットでマルチバイト文字コード体系が使用されている場合は、1文字が1バイト以上で構成される場合があるため、バイト数は文字数とは異なります。したがって、特定の文字数に対して予測される最大バイト数を見込んで、列幅を慎重に選択する必要があります。この問題は、列サイズの定義時にキャラクタ・セマンティクスに切り替えることで回避できます。

NLS_LENGTH_SEMANTICSによって、CHARVARCHAR2およびLONGの各列を、バイト・セマンティクスまたは文字長セマンティクスのいずれかを使用して作成できます。NCHARNVARCHAR2CLOBおよびNCLOBの各列は、常に文字ベースです。既存の列は、影響を受けません。

既存のアプリケーションとの互換性を維持するためには、バイト・セマンティクスを使用する必要があります。

NLS_LENGTH_SEMANTICSは、SYSスキーマで作成された表には適用されません。データ・ディクショナリでは、常にバイト・セマンティクスが使用されます。長さ修飾子BYTEまたはCHARが表作成DDLで指定されていない場合、SYSによって所有される表は常にバイト・セマンティックスを使用します。

クライアント上で環境変数NLS_LENGTH_SEMANTICSが設定されていない場合、クライアント・セッションはデフォルトでデータベース・サーバー上のNLS_LENGTH_SEMANTICSの値に設定されることに注意してください。これにより、ネットワーク上のすべてのクライアント・セッションは同じNLS_LENGTH_SEMANTICS動作となります。各クライアント上で個別に環境変数を設定すると、そのクライアントのサーバー初期化パラメータをオーバーライドできます。

クライアントまたはOracle JDBC Thinドライバ経由で接続されるクライアント上でNLS_LENGTH_SEMANTICS環境変数が設定されていない場合、クライアント・セッションにはクライアントの接続先インスタンスのNLS_LENGTH_SEMANTICS初期化パラメータの値がデフォルト設定されます。互換性を保つために、このパラメータを未定義のままにするかBYTEに設定することをお薦めします。

ノート:

インスタンスまたはサーバー・パラメータ・ファイルで、NLS_LENGTH_SEMANTICSパラメータをCHARに設定しないことをお薦めします。これによって、多数の既存インストール・スクリプトに文字長さセマンティクスを持つ列が予期せず作成され、バッファ・オーバーフローなどのランタイム・エラーが発生する場合があります。