ヘッダーをスキップ
Oracle Database グローバリゼーション・サポート・ガイド
10g リリース2(10.2)
B19218-02
  目次へ
目次
索引へ
索引

前へ
前へ
次へ
次へ
 

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

この章では、グローバリゼーション・サポート環境の設定方法について説明します。 この章の内容は、次のとおりです。

NLSパラメータの設定

NLS(National Language Support)パラメータによって、クライアントとサーバーの両方でのロケール固有の動作が決定します。NLSパラメータは、次の4通りの方法で指定できます。

表3-1に、NLSパラメータの各種設定方法の優先順位を示します。優先順位の低い設定は、優先順位の高い設定によってオーバーライドされます。たとえば、デフォルト値の優先順位が最も低く、他のすべての方法でオーバーライドされます。

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

優先順位 方法

1(最も高い優先順位)

SQL関数での明示的な設定

2

ALTER SESSION文による設定

3

環境変数としての設定

4

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

5

デフォルト


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

表3-2 NLSパラメータ

パラメータ 説明 デフォルト 有効範囲: I = 初期化パラメータ・ファイル E = 環境変数 A = ALTER SESSION

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_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

NLS_DUAL_CURRENCY


第2通貨記号

NLS_TERRITORYから導出

I、E、A


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

ロケールとは、システムやプログラムを実行する言語的および文化的な環境のことです。Oracleソフトウェアのロケール動作を指定する最も簡単な方法は、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、charsetはUS7ASCIIです。NLS_LANGおよびその他のNLSパラメータの値は、大/小文字を区別しません。

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

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に使用すると日本語データを格納および表示できません。

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

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-97      962.5
Urman                     07-MAR-98        975
Popp                      07-DEC-99      862.5

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

言語がFRENCH、地域がFRANCE、Oracleキャラクタ・セットがWE8ISO8859P1となるように、NLS_LANGを設定します。

% setenv NLS_LANG French_France.WE8ISO8859P1

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

LAST_NAME                 HIRE_DAT     SALARY
------------------------- -------- ----------
Sciarra                   30/09/97      962,5
Urman                     07/03/98        975
Popp                      07/12/99      862,5

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

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

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

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環境は、クライアントが新しい設定を明示的に取得してローカル環境を変更しないかぎり、変更されません。

ロケールのバリアント

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

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

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

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

Oracleの地域 Oracleの言語

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


NLS_LANG設定とデータベース・キャラクタ・セットを一致させる必要があるかどうか

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

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


関連項目:

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

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

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

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

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

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

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

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

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

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の現行の値が表示されます。


    関連項目:

    『Oracle Databaseリファレンス』

OCINlsGetInfo()関数

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


関連項目:

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

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

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

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ではバイナリ・ソートが使用されます)

  • 書込み方向

  • 肯定的および否定的な応答文字列(YESおよびNOなど)

初期化パラメータ・ファイルの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を異なる値に設定した場合の動作を示します。

例3-3 NLS_LANGUAGE=ITALIAN

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

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-97      962.5
Urman                     07-MAR-98        975
Popp                      07-DIC-99      862.5

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


関連項目:

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

例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-97      962.5
Urman                     07-MÄR-98        975
Popp                      07-DEZ-99      862.5

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

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文を発行します。

ALTER SESSION SET NLS_TERRITORY = France;

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

例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文を使用して地域をドイツに変更します。

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

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


関連項目:

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

例3-7 NLS_LANGUAGE=GERMAN、NLS_TERRITORY=GERMANY

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

ALTER SESSION SET NLS_LANGUAGE = German;
Sitzung 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文を使用して地域をアメリカに変更します。

ALTER SESSION SET NLS_TERRITORY = America;
Sitzung wurde geändert.

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

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

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

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

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

セッション中の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-97      962,5
Urman                     07-MAR-98        975
Popp                      07-DIC-99      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.97      962.5
Urman                     07.MÄR.98        975
Popp                      07.DEZ.99      862.5

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

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

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

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

Oracleでは、日付と時刻の表示を制御できます。この項の内容は、次のとおりです。

日付書式

表3-4に、様々な日付書式を示します。

表3-4 日付書式

国名 説明

エストニア

dd.mm.yyyy

28.02.2003

ドイツ

dd-mm-rr

28-02-03

日本

rr-mm-dd

03-02-28

英国

dd-mon-rr

28-Feb-03

米国

dd-mon-rr

28-Feb-03


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

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'

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

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

NLS_DATE_FORMAT = "DD RM YYYY"

次のSELECT文を入力します。

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のデフォルト値は、次の方法で変更できます。

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

  • 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リファレンス』を参照してください。

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の使用方法の例として、日付の言語をフランス語に設定します。

ALTER SESSION SET NLS_DATE_LANGUAGE = FRENCH;

SELECT文を入力します。

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文を入力します。

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の場合、日付は次のように挿入されます。

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

関連項目:

『Oracle Database SQLリファレンス』

時刻書式

表3-5に、様々な時刻書式を示します。

表3-5 時刻書式

国名 説明

エストニア

hh24:mi:ss

13:50:23

ドイツ

hh24:mi:ss

13:50:23

日本

hh24:mi:ss

13:50:23

英国

hh24:mi:ss

13:50:23

米国

hh:mi:ssxff am

1:50:23.555 PM


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

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リファレンス』を参照してください。

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の値は次の方法で変更できます。

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

  • ALTER SESSION文を使用します。


    関連項目:


カレンダ定義

この項の内容は、次のとおりです。

カレンダ書式

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

週の最初の曜日

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

表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」

年の最初の暦週

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

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

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

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

表3-7に、暦年の第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週


表3-8に、暦年の第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」

1年の日数と月数

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

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

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

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

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

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

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

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


関連項目:

「NLS_CALENDAR」

紀元の年

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

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

NLS_CALENDAR

プロパティ 説明
パラメータ・タイプ 文字列
パラメータの有効範囲 初期化パラメータ、環境変数、ALTER SESSIONおよびSQL関数
デフォルト値 Gregorian(グレゴリオ暦)
値の範囲 有効なカレンダ書式名

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

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

  • Arabic Hijrah(イスラム歴)

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

  • Gregorian(グレゴリオ暦)

  • Japanese Imperial(日本の元号暦)

  • Persian(ペルシャ暦)

  • ROC Official(台湾暦)

  • Thai Buddha(タイ仏教暦)


    関連項目:

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

例3-17 NLS_CALENDAR='English Hijrah'

NLS_CALENDARをEnglish Hijrahに設定します。

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

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

SELECT SYSDATE FROM DUAL;

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

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

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

この項の内容は、次のとおりです。

数値書式

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

表3-9に、数値書式の例を示します。

表3-9 数値書式の例

国名 数値書式

エストニア

1 234 567,89

ドイツ

1.234.567,89

日本

1,234,567.89

英国

1,234,567.89

米国

1,234,567.89


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


関連項目:

「NLS_TERRITORY」

NLS_NUMERIC_CHARACTERS

プロパティ 説明
パラメータ・タイプ 文字列
パラメータの有効範囲 初期化パラメータ、環境変数、ALTER SESSIONおよびSQL関数
デフォルト値 特定地域に対するデフォルトの小数点文字とグループ・セパレータ
値の範囲 2つの有効な数字

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

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

例3-18 NLS_NUMERIC_CHARACTERSの設定

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

ALTER SESSION SET NLS_NUMERIC_CHARACTERS = ",.";

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

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

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リファレンス』を参照してください。

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-10に、標準的な通貨書式の一部を示します。

表3-10 通貨書式の例

国名

エストニア

1 234,56 kr

ドイツ

1.234,56

日本

¥1,234.56

英国

£1,234.56

米国

$1,234.56


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リファレンス』を参照してください。

NLS_ISO_CURRENCY

プロパティ 説明
パラメータ・タイプ 文字列
パラメータの有効範囲 初期化パラメータ、環境変数、ALTER SESSIONおよびSQL関数
デフォルト値 NLS_TERRITORYから導出
値の範囲 有効な任意の文字列

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

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

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

表3-11 ISO通貨の例

国名

エストニア

1 234 567,89 EEK

ドイツ

1.234.567,89 EUR

日本

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を次のように設定します。

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リファレンス』を参照してください。

NLS_DUAL_CURRENCY

プロパティ 説明
パラメータ・タイプ 文字列
パラメータの有効範囲 初期化パラメータ、環境変数、ALTER SESSIONおよびSQL関数
デフォルト値 NLS_TERRITORYから導出
値の範囲 有効な任意の記号

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

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

Oracleのユーロ・サポート

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

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

  • 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文を入力します。

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通貨記号はオーバーライドできません。

NLS_MONETARY_CHARACTERS

プロパティ 説明
パラメータ・タイプ 文字列
パラメータの有効範囲 環境変数
デフォルト値 NLS_TERRITORYから導出
値の範囲 有効な任意の文字

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

NLS_CREDIT

プロパティ 説明
パラメータ・タイプ 文字列
パラメータの有効範囲 環境変数
デフォルト値 NLS_TERRITORYから導出
値の範囲 最大9バイト(NULLを含まない)の任意の文字列

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

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

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

NLS_DEBIT

プロパティ 説明
パラメータ・タイプ 文字列
パラメータの有効範囲 環境変数
デフォルト値 NLS_TERRITORYから導出
値の範囲 最大9バイト(NULLを含まない)の任意の文字列

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

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

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

言語ソート・パラメータ

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

この項の内容は、次のとおりです。

NLS_SORT

プロパティ 説明
パラメータ・タイプ 文字列
パラメータの有効範囲 初期化パラメータ、環境変数、ALTER SESSIONおよびSQL関数
デフォルト値 NLS_LANGUAGEから導出
値の範囲 BINARYまたは有効な言語ソート名

NLS_SORTは、文字データのソート・タイプを指定します。これにより、NLS_LANGUAGEから導出されるデフォルト値をオーバーライドします。

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

NLS_SORT = BINARY | sort_name

BINARYはバイナリ・ソートを指定し、sort_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のデフォルト値は、次のいずれかの方法で変更できます。

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

  • ALTER SESSION文を使用します。


    関連項目:


NLS_COMP

プロパティ 説明
パラメータ・タイプ 文字列
パラメータの有効範囲 初期化パラメータ、環境変数およびALTER SESSION
デフォルト値 BINARY
値の範囲 BINARYLINGUISTICまたはANSI

NLS_COMPの値は、SQL操作の比較動作に影響を与えます。

バイナリ比較のかわりに言語比較を実行する際は、NLS_COMPを使用すると、SQL文にNLSSORT関数を使用する複雑な処理を回避できます。NLS_COMPLINGUISTICに設定すると、SQL操作ではNLS_SORTの値に基づいて言語比較が実行されます。ANSIは下位互換性を保つために設定します。通常、言語比較を実行する場合は、NLS_COMPLINGUISTICに設定する必要があります。

次のようにNLS_COMPLINGUISTICに設定します。

ALTER SESSION SET NLS_COMP = LINGUISTIC;

NLS_COMPLINGUISTICに設定すると、言語索引によって、言語上の比較のパフォーマンスが向上します。言語索引を使用可能にするには、次の構文を使用します。

CREATE INDEX i ON t(NLSSORT(col, 'NLS_SORT=FRENCH'));

キャラクタ・セット変換パラメータ

この項の内容は、次のとおりです。

NLS_NCHAR_CONV_EXCP

プロパティ 説明
パラメータ・タイプ 文字列
パラメータの有効範囲 初期化パラメータおよびALTER SESSION
デフォルト値 FALSE
値の範囲 TRUEまたはFALSE

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


関連項目:

キャラクタ・セット変換中のデータ消失の詳細は、第11章「キャラクタ・セットの移行」を参照してください。

長さセマンティクス

この項の内容は、次のとおりです。

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およびSYSTEMの表には適用されません。データ・ディクショナリでは、常にバイト・セマンティクスが使用されます。

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


関連項目: