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 |
|
3 |
環境変数としての設定 |
4 |
初期化パラメータ・ファイル内での指定 |
5 (最も低い) |
データベース作成時に指定されたデフォルト値 |
表3-2に、使用可能なNLSパラメータを示します。SQL関数のNLSパラメータを指定するには特定の関数を使用する必要があるため、この表にはSQL関数の有効範囲は示されていません。この表では、有効範囲に次の値を示します。
I = 初期化パラメータ・ファイル
E = 環境変数
A = ALTER SESSION
表3-2 NLSパラメータ
パラメータ | 説明 | デフォルト | 有効範囲 |
---|---|---|---|
暦法 |
Gregorian(グレゴリオ暦) |
I、E、A |
|
SQL、PL/SQL演算子の比較 |
|
I、E、A |
|
貸方の会計記号 |
|
E |
|
各国通貨記号 |
|
I、E、A |
|
日付書式 |
|
I、E、A |
|
曜日と月の名前に使用する言語 |
|
I、E、A |
|
借方の会計記号 |
|
E |
|
第2通貨記号 |
|
I、E、A |
|
ISO国際通貨記号 |
|
I、E、A |
|
言語、地域、文字セット |
|
E |
|
言語 |
|
I、A |
|
文字列の処理方法 |
|
I、E、A |
|
リスト内項目の区切り文字 |
|
E |
|
ドルとセント(または相当する通貨)に使用する通貨記号 |
|
E |
|
文字列型変換時のデータ消失のレポート |
|
I、A |
|
小数点記号および桁グループ・セパレータ |
|
I、E、A |
|
照合 |
|
I、E、A |
|
地域 |
|
I、A |
|
タイムスタンプ |
|
I、E、A |
|
タイム・ゾーン付きのタイムスタンプ |
|
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のメッセージ、ソート、曜日名および月名に使用する言語などの規則を指定します。各サポート対象言語には、
AMERICAN
、FRENCH
またはGERMAN
などの一意の名前が付いています。languageの引数によって、territoryおよびcharacter setの引数にデフォルト値が指定されます。languageを指定しない場合、デフォルト値はAMERICAN
に設定されます。 -
territory
デフォルトの日付、通貨単位および数値書式などの規則を指定します。各サポート対象地域には、
AMERICA
、FRANCE
またはCANADA
などの一意の名前が付いています。territoryを指定しない場合、値はlanguageの値から導出されます。 -
charset
クライアント・アプリケーションが使用する文字セット(通常はユーザーの端末の文字セットまたはOSの文字セットに対応するOracle Databaseの文字セット)を指定します。サポート対象の各文字セットには、
US7ASCII
、WE8ISO8859P1
、WE8DEC
、WE8MSWIN1252
または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_LANGUAGE
、NLS_TERRITORY
および他のNLSインスタンスのパラメータの値によって初期化された状態のままです。これらのパラメータを変更して、インスタンスを再起動すると、デフォルト値を変更できます。
セッション中にNLS環境の動的な変更が必要な場合があります。その場合は、ALTER
SESSION
文を使用してNLS_LANGUAGE
、NLS_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_LANGUAGE NLS_SORT NLS_TERRITORY NLS_CHARACTERSET
-
V$NLS_PARAMETERS
には、次のNLSパラメータの現行の値が表示されます。NLS_CHARACTERSET NLS_NCHAR_CHARACTERSET NLS_NUMERIC_CHARACTERS NLS_DATE_FORMAT NLS_DATE_LANGUAGE NLS_TIME_TZ_FORMAT NLS_TIMESTAMP_FORMAT NLS_TIMESTAMP_TZ_FORMAT NLS_CALENDAR NLS_LANGUAGE NLS_CURRENCY NLS_ISO_CURRENCY NLS_TERRITORY NLS_SORT NLS_COMP NLS_LENGTH_SEMANTICS NLS_NCHAR_CONV_EXP
関連項目:
3.4.3 OCINlsGetInfo()関数
ユーザー・アプリケーションでは、OCINlsGetInfo()
関数を使用して、クライアントのNLS設定を問い合せることができます。
関連項目:
OCINlsGetInfo()
の詳細は、「OCIでのロケール情報の取得」を参照してください
3.5 言語および地域のパラメータ
この項では、次のパラメータについて説明します。
3.5.1 NLS_LANGUAGE
プロパティ | 説明 |
---|---|
パラメータ・タイプ |
文字列 |
パラメータの有効範囲 |
初期化パラメータおよび |
デフォルト値 |
|
値の範囲 |
有効な任意の言語名 |
NLS_LANGUAGE
は、次のセッション特性に対してデフォルトの規則を指定します。
-
サーバー・メッセージの言語
-
曜日名と月名の言語およびその略称(SQL関数
TO_CHAR
とTO_DATE
で指定されます) -
AM、PM、ADおよびBCに相当する記号。(A.M.、P.M.、A.D.およびB.C.は、
NLS_LANGUAGE
がAMERICAN
に設定されている場合のみ有効です。) -
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_name
はrdbms
であるため、$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
プロパティ | 説明 |
---|---|
パラメータ・タイプ |
文字列 |
パラメータの有効範囲 |
初期化パラメータおよび |
デフォルト値 |
|
値の範囲 |
有効な任意の地域名 |
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_TERRITORY
とNLS_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_TERRITORY
をAMERICA
に設定し、NLS_LANGUAGE
をAMERICAN
に設定すると、次のような結果が出力されます。
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のデフォルト値のオーバーライド
例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_LANG
のlanguage
およびterritory
引数で指定された値に設定されます。NLS_LANG
が定義されていない場合、ALTER
SESSION
文は暗黙的に実行されません。
NLS_LANG
が定義されている場合は、セッションの接続先(直接接続と間接接続の両方)インスタンスすべてに対して、ALTER
SESSION
文が暗黙的に実行されます。NLSパラメータの値が、ALTER
SESSION
によってセッション中に明示的に変更されると、その変更内容は、ユーザー・セッションの接続先のインスタンスすべてに反映されます。
3.6 日付および時間を指定するパラメータ
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
プロパティ | 説明 |
---|---|
パラメータ・タイプ |
文字列 |
パラメータの有効範囲 |
初期化パラメータ、環境変数および |
デフォルト値 |
|
値の範囲 |
有効な日付書式マスク |
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
プロパティ | 説明 |
---|---|
パラメータ・タイプ |
文字列 |
パラメータの有効範囲 |
初期化パラメータ、環境変数、 |
デフォルト値 |
|
値の範囲 |
有効な任意の言語名 |
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.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
プロパティ | 説明 |
---|---|
パラメータ・タイプ |
文字列 |
パラメータの有効範囲 |
初期化パラメータ、環境変数および |
デフォルト値 |
|
値の範囲 |
有効な日時書式マスク |
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
プロパティ | 説明 |
---|---|
パラメータ・タイプ |
文字列 |
パラメータの有効範囲 |
初期化パラメータ、環境変数および |
デフォルト値 |
|
値の範囲 |
有効な日時書式マスク |
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
文を使用します。関連項目:
-
TO_TIMESTAMP_TZ関数とALTER SESSION文の詳細は、
『Oracle Database SQL言語リファレンス』
を参照してください。
-
タイム・ゾーンの詳細は、「タイム・ゾーン・ファイルの選択」を参照してください
-
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
パラメータによって決定されます。
関連項目:
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
パラメータによって決定されます。
関連項目:
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
パラメータで指定します。
関連項目:
3.7.2 NLS_CALENDAR
プロパティ | 説明 |
---|---|
パラメータ・タイプ |
文字列 |
パラメータの有効範囲 |
初期化パラメータ、環境変数、 |
デフォルト値 |
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
パラメータでオーバーライドできます。
関連項目:
3.8.2 NLS_NUMERIC_CHARACTERS
プロパティ | 説明 |
---|---|
パラメータ・タイプ |
文字列 |
パラメータの有効範囲 |
初期化パラメータ、環境変数、 |
デフォルト値 |
特定地域に対するデフォルトの小数点文字とグループ・セパレータ |
値の範囲 |
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_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
プロパティ | 説明 |
---|---|
パラメータ・タイプ |
文字列 |
パラメータの有効範囲 |
初期化パラメータ、環境変数、 |
デフォルト値 |
|
値の範囲 |
有効な通貨記号文字列 |
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
文の詳細は、『Oracle Database SQL言語リファレンス』を参照してください
3.9.3 NLS_ISO_CURRENCY
プロパティ | 説明 |
---|---|
パラメータ・タイプ |
文字列 |
パラメータの有効範囲 |
初期化パラメータ、環境変数、 |
デフォルト値 |
|
値の範囲 |
有効な任意の文字列 |
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
プロパティ | 説明 |
---|---|
パラメータ・タイプ |
文字列 |
パラメータの有効範囲 |
初期化パラメータ、環境変数、 |
デフォルト値 |
|
値の範囲 |
有効な任意の記号 |
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_CURRENCY
がFRANCE
に設定されているとします。次の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_MONETARY_CHARACTERS
では、通貨式で数値グループを区切る文字を指定します。たとえば、地域が米国の場合、3桁のセパレータはカンマで、小数点セパレータはピリオドです。
3.9.7 NLS_CREDIT
プロパティ | 説明 |
---|---|
パラメータ・タイプ |
文字列 |
パラメータの有効範囲 |
環境変数 |
デフォルト値 |
|
値の範囲 |
最大9バイト(NULLを含まない)の任意の文字列 |
NLS_CREDIT
は、財務レポートで貸方を表示する記号を設定します。このパラメータのデフォルト値は、NLS_TERRITORY
によって決定されます。たとえば、空白はNLS_CREDIT
の有効な値です。
このパラメータが指定できるのは、クライアント環境のみです。
このパラメータは、OCINlsGetInfo()
関数を使用して取得できます。
3.10 言語ソート・パラメータ
3.10.1 NLS_SORT
プロパティ | 説明 |
---|---|
パラメータ・タイプ |
文字列 |
パラメータの有効範囲 |
初期化パラメータ、環境変数、 |
デフォルト値 |
|
値の範囲 |
|
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
のデフォルト値は、次の方法で変更できます。
-
初期化パラメータ・ファイル内で値を変更してから、インスタンスを再起動します。
-
ALTER
SESSION
文を使用します。関連項目:
-
ALTER SESSION
文の詳細は、『Oracle Database SQL言語リファレンス』を参照してください -
言語照合名のリストは、「言語ソート」を参照してください
3.10.2 NLS_COMP
プロパティ | 説明 |
---|---|
パラメータ・タイプ |
文字列 |
パラメータの有効範囲 |
初期化パラメータ、環境変数および |
デフォルト値 |
|
値の範囲 |
|
NLS_COMP
の値は、決定された照合がUSING_NLS_COMP
であるSQL操作の比較動作に影響を与えます。
関連項目:
-
擬似照合
USING_NLS_COMP
の詳細は、「データ・バインドされた照合について」を参照してください
3.11 文字セット変換パラメータ
この項には次のトピックが含まれます:
3.11.1 NLS_NCHAR_CONV_EXCP
プロパティ | 説明 |
---|---|
パラメータ・タイプ |
文字列 |
パラメータの有効範囲 |
初期化パラメータおよび |
デフォルト値 |
|
値の範囲 |
|
NLS_NCHAR_CONV_EXCP
は、NCHAR
/NVARCHAR
データとCHAR
/VARCHAR2
データの間で暗黙的または明示的な文字列型の変換時にデータが消失した場合に、エラーをレポートするかどうかを決定します。デフォルト値の場合、エラーはレポートされません。
関連項目:
文字セット変換中のデータ消失の詳細は、「文字セットの移行」を参照してください
3.12 長さセマンティクス
この項には次のトピックが含まれます:
3.12.1 NLS_LENGTH_SEMANTICS
プロパティ | 説明 |
---|---|
パラメータ・タイプ |
文字列 |
パラメータの有効範囲 |
環境変数、初期化パラメータおよび |
デフォルト値 |
|
値の範囲 |
|
デフォルトでは、文字データ型CHAR
およびVARCHAR2
は、文字単位ではなくバイト単位で指定します。したがって、表定義でCHAR(20)
と指定すると、文字データを格納するために20バイトが割り当てられます。
データベース文字セットでシングルバイト文字コード体系が使用されている場合は、文字数がバイト数と同じであるため、このような指定は適切に処理されます。データベース文字セットでマルチバイト文字コード体系が使用されている場合は、1文字が1バイト以上で構成される場合があるため、バイト数は文字数とは異なります。したがって、特定の文字数に対して予測される最大バイト数を見込んで、列幅を慎重に選択する必要があります。この問題は、列サイズの定義時にキャラクタ・セマンティクスに切り替えることで回避できます。
NLS_LENGTH_SEMANTICS
によって、CHAR
、VARCHAR2
およびLONG
の各列を、バイト・セマンティクスまたは文字長セマンティクスのいずれかを使用して作成できます。NCHAR
、NVARCHAR2
、CLOB
および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
に設定しないことをお薦めします。これによって、多数の既存インストール・スクリプトに文字長さセマンティクスを持つ列が予期せず作成され、バッファ・オーバーフローなどのランタイム・エラーが発生する場合があります。
関連項目: