この章では、グローバリゼーション・サポート環境の設定方法について説明します。内容は次のとおりです。
NLS(National Language Support)パラメータによって、クライアントとサーバーの両方でのロケール固有の動作が決定します。NLSパラメータは、次の4通りの方法で指定できます。
サーバー上の初期化パラメータとして指定します。
パラメータを初期化パラメータ・ファイルに含めて、デフォルトのセッションNLS環境を指定できます。この設定は、クライアント側には影響を与えません。サーバーの動作のみを制御します。次に例を示します。
NLS_TERRITORY = "CZECH REPUBLIC"
クライアントの環境変数として指定します。
NLS環境変数(プラットフォーム依存の場合があります)を使用して、クライアントに対してロケールに依存する動作を指定できます。また、初期化パラメータ・ファイルでセッションに設定されているデフォルト値をオーバーライドできます。UNIXシステムでの例を示します。
% setenv NLS_SORT FRENCH
ALTER SESSION
文を使用して指定します。
ALTER
SESSION
文に設定されているNLSパラメータを使用すると、初期化パラメータ・ファイルのセッションに設定されたデフォルト値や環境変数を使用してクライアントで設定したデフォルト値をオーバーライドできます。
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パラメータの各種設定方法の優先順位を示します。優先順位の低い設定は、優先順位の高い設定によってオーバーライドされます。たとえば、デフォルト値の優先順位が最も低く、他のすべての方法でオーバーライドされます。
表3-1 NLSパラメータの設定方法とその優先順位
優先順位 | 方法 |
---|---|
1(最も高い優先順位) |
SQL関数での明示的な設定 |
2 |
|
3 |
環境変数としての設定 |
4 |
初期化パラメータ・ファイル内での指定 |
5 |
デフォルト |
表3-2に、使用可能なNLSパラメータを示します。SQL関数のNLSパラメータを指定するには特定の関数を使用する必要があるため、この表にはSQL関数の有効範囲は示されていません。
表3-2 NLSパラメータ
パラメータ | 説明 | デフォルト | 有効範囲: I = 初期化パラメータ・ファイル E = 環境変数 A = ALTER SESSION |
---|---|---|---|
|
暦法 |
Gregorian(グレゴリオ暦) |
I、E、A |
|
SQL、PL/SQL演算子の比較 |
|
I、E、A |
|
貸方の会計記号 |
|
E |
|
各国通貨記号 |
|
I、E、A |
|
日付書式 |
|
I、E、A |
|
曜日名と月名に使用する言語 |
|
I、E、A |
|
借方の会計記号 |
|
E |
|
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 |
|
第2通貨記号 |
|
I、E、A |
ロケールとはシステムやプログラムを実行する言語的および文化的環境のことです。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
、charsetはUS7ASCII
です。NLS_LANG
およびその他のNLSパラメータの値は、大/小文字を区別しません。
NLS_LANG
パラメータの各コンポーネントによって、グローバリゼーション・サポート機能のサブセットの操作が制御されます。
language
Oracle Databaseのメッセージ、ソート、曜日名および月名に使用する言語などの規則を指定します。各サポート対象言語には、AMERICAN
、FRENCH
またはGERMAN
などの一意の名前が付いています。languageの引数によって、territoryおよびcharsetの引数にデフォルト値が指定されます。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
の3つのコンポーネントは、次の例のように、様々な組合せで指定できます。
NLS_LANG = AMERICAN_AMERICA.WE8MSWIN1252 NLS_LANG = FRENCH_CANADA.WE8ISO8859P1 NLS_LANG = JAPANESE_JAPAN.JA16EUC
非論理的な組合せも設定できますが、正しく動作しません。たとえば、次の指定では、西ヨーロッパ諸国のキャラクタ・セットを使用して日本語をサポートしようとしています。
NLS_LANG = JAPANESE_JAPAN.WE8ISO8859P1
WE8ISO8859P1キャラクタ・セットでは日本語文字がサポートされないため、この定義を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 ...
日付書式と数値書式が変更されていることに注意してください。基礎となるデータは同じであるため、数値に変更はありません。
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環境は、クライアントが新しい設定を明示的に取得してローカル環境を変更しないかぎり、変更されません。
Oracle Database 10gまでのOracleでは、言語と地域が別々に定義されていました。このため、地域定義はユーザーの言語設定から独立していました。Oracle Database 10g以降、ユーザーの言語設定に基づいて一部の地域に異なる日付、時刻、数値および通貨書式を使用できます。この種の言語依存の地域定義をロケールのバリアントと呼びます。
バリアントを正常に動作させるには、NLS_TERRITORY
およびNLS_LANGUAGE
の両方を指定する必要があります。
表3-3に、バリアントをサポートするように拡張されている地域を示します。
表3-3 Oracle Databaseのロケールのバリアント
Oracle Databaseの地域 | Oracle Databaseの言語 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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』を参照してください。 |
Oracleには、クライアントのOSキャラクタ・セットがOracle NLSクライアントのキャラクタ・セットと異なる場合に対処するために、環境変数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
の設定は不要であり、無視されます。
CREATE
DATABASE
文の実行中に新しいデータベースが作成されると、NLS関連のデータベース構成が設定されます。現行のNLSインスタンス・パラメータは、データベース・キャラクタ・セットおよび各国語キャラクタ・セットとともにデータ・ディクショナリに格納されます。NLSインスタンス・パラメータは、インスタンスの起動時に初期化パラメータ・ファイルから読み込まれます。
NLSパラメータの値は、次のいずれかを使用して検索できます。
アプリケーションでは、次のデータ・ディクショナリ・ビューに問い合せて、セッション、インスタンスおよびデータベースのNLSパラメータをチェックできます。
アプリケーションでは、次のNLS動的パフォーマンス・ビューをチェックできます。
V$NLS_VALID_VALUES
には、NLSパラメータNLS_LANGUAGE
、NLS_SORT
、NLS_TERRITORY
およびNLS_CHARACTERSET
の値が表示されます。
V$NLS_PARAMETERS
には、NLSパラメータNLS_CALENDAR
、NLS_CHARACTERSET
、NLS_CURRENCY
、NLS_DATE_FORMAT
、NLS_DATE_LANGUAGE
、NLS_ISO_CURRENCY
、NLS_LANGUAGE
、NLS_NUMERIC_CHARACTERS
、NLS_SORT
、NLS_TERRITORY
、NLS_NCHAR_CHARACTERSET
、NLS_COMP
、NLS_LENGTH_SEMANTICS
、NLS_NCHAR_CONV_EXP
、NLS_TIMESTAMP_FORMAT
、NLS_TIMESTAMP_TZ_FORMAT
、NLS_TIME_FORMAT
およびNLS_TIME_TZ_FORMAT
の現行の値が表示されます。
関連項目: 『Oracle Databaseリファレンス』 |
この項では、次のパラメータについて説明します。
プロパティ | 説明 |
---|---|
パラメータ・タイプ | 文字列 |
パラメータの有効範囲 | 初期化パラメータおよびALTER SESSION |
デフォルト値 | NLS_LANG から導出 |
値の範囲 | 有効な任意の言語名 |
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
を異なる値に設定した場合の動作を示します。
例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-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 ...
月名の略称の言語が変更されていることに注意してください。
プロパティ | 説明 |
---|---|
パラメータ・タイプ | 文字列 |
パラメータの有効範囲 | 初期化パラメータおよび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_TERRITORY
とNLS_LANGUAGE
を異なる値に設定した場合の動作を示します。
例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
文を使用して地域をドイツに変更します。
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
文を使用して言語をドイツ語に変更します。
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
のデフォルト値および特定の書式設定パラメータのデフォルト値は、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_LANG
のlanguage
およびterritory
引数で指定された値に設定されます。NLS_LANG
が定義されていない場合、ALTER
SESSION
文は暗黙的に実行されません。
NLS_LANG
が定義されている場合は、セッションの接続先(直接接続と間接接続の両方)インスタンスすべてに対して、ALTER
SESSION
文が暗黙的に実行されます。NLSパラメータの値が、ALTER
SESSION
によってセッション中に明示的に変更されると、その変更内容は、ユーザー・セッションの接続先のインスタンスすべてに反映されます。
Oracle Databaseでは、日付と時刻の表示を制御できます。この項の内容は、次のとおりです。
表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 |
この項では、次のパラメータについて説明します。
プロパティ | 説明 |
---|---|
パラメータ・タイプ | 文字列 |
パラメータの有効範囲 | 初期化パラメータ、環境変数および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言語リファレンス』を参照してください。 |
プロパティ | 説明 |
---|---|
パラメータ・タイプ | 文字列 |
パラメータの有効範囲 | 初期化パラメータ、環境変数、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 |
この項では、次のパラメータについて説明します。
プロパティ | 説明 |
---|---|
パラメータ・タイプ | 文字列 |
パラメータの有効範囲 | 初期化パラメータ、環境変数および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言語リファレンス』を参照してください。 |
プロパティ | 説明 |
---|---|
パラメータ・タイプ | 文字列 |
パラメータの有効範囲 | 初期化パラメータ、環境変数および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
パラメータによって決定されます。
一部の国では、週番号を使用してスケジューリング、計画および会計処理を行います。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の週番号が戻されます。
表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
パラメータによって決定されます。
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です。
暦法は、NLS_CALENDAR
パラメータで指定します。
イスラム暦は、ヒジュラ紀元の年から始まります。
日本の元号暦は天皇が即位した最初の年から始まります。たとえば、1998年は平成10年となります。ただし、日本では、グレゴリオ暦も広く理解されているので、1998年を表現するために98年と平成10年の両方が使用されます。
プロパティ | 説明 |
---|---|
パラメータ・タイプ | 文字列 |
パラメータの有効範囲 | 初期化パラメータ、環境変数、ALTER SESSION およびSQL関数 |
デフォルト値 | Gregorian(グレゴリオ暦) |
値の範囲 | 有効なカレンダ書式名 |
世界中で様々な暦法が使用されています。NLS_CALENDAR
によって、Oracle Databaseで使用する暦法が指定されます。
NLS_CALENDAR
パラメータには、次の値のいずれかを指定できます。
Arabic Hijrah(イスラム歴)
English Hijrah(英語版イスラム歴)
Gregorian(グレゴリオ暦)
Japanese Imperial(日本の元号暦)
Persian(ペルシャ暦)
ROC Official(台湾暦)
Thai Buddha(タイ仏教暦)
この項の内容は、次のとおりです。
データベースでは、数字列を正確に解釈するために、各セッションで使用される数値書式設定の規則を認識している必要があります。たとえば、数値の入力時に小数点文字としてピリオドまたはカンマのどちらを使用するか(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
パラメータでオーバーライドできます。
プロパティ | 説明 |
---|---|
パラメータ・タイプ | 文字列 |
パラメータの有効範囲 | 初期化パラメータ、環境変数、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_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に、標準的な通貨書式の一部を示します。
プロパティ | 説明 |
---|---|
パラメータ・タイプ | 文字列 |
パラメータの有効範囲 | 初期化パラメータ、環境変数、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 およびSQL関数 |
デフォルト値 | NLS_TERRITORY から導出 |
値の範囲 | 有効な任意の文字列 |
NLS_ISO_CURRENCY
では、C
数値書式マスクで戻される文字列の各国通貨記号を指定します。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
初期化パラメータ・ファイル内で値を変更してから、インスタンスを再起動します。
ALTER
SESSION
文を使用します。
関連項目: ALTER SESSION 文の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。 |
プロパティ | 説明 |
---|---|
パラメータ・タイプ | 文字列 |
パラメータの有効範囲 | 初期化パラメータ、環境変数、ALTER SESSION およびSQL関数 |
デフォルト値 | NLS_TERRITORY から導出 |
値の範囲 | 有効な任意の記号 |
NLS_DUAL_CURRENCY
を使用すると、NLS_TERRITORY
で暗黙的に定義されたデフォルトの第2通貨記号がオーバーライドされます。
NLS_DUAL_CURRENCY
は、ユーロ移行期間中にユーロ通貨記号をサポートするために導入されました。ユーロ記号をサポートしているキャラクタ・セットについては、表A-8「ユーロ記号をサポートしているキャラクタ・セット」を参照してください。
欧州通貨連合(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
文を入力します。
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_TERRITORY から導出 |
値の範囲 | 有効な任意の文字 |
NLS_MONETARY_CHARACTERS
では、通貨式で数値グループを区切る文字を指定します。たとえば、地域が米国の場合、3桁のセパレータはカンマで、小数点セパレータはピリオドです。
プロパティ | 説明 |
---|---|
パラメータ・タイプ | 文字列 |
パラメータの有効範囲 | 環境変数 |
デフォルト値 | NLS_TERRITORY から導出 |
値の範囲 | 最大9バイト(NULLを含まない)の任意の文字列 |
NLS_CREDIT
は、財務レポートで貸方を表示する記号を設定します。このパラメータのデフォルト値は、NLS_TERRITORY
によって決定されます。たとえば、空白はNLS_CREDIT
の有効な値です。
このパラメータが指定できるのは、クライアント環境のみです。
このパラメータは、OCIGetNlsInfo()
関数を使用して取得できます。
言語ソート・パラメータを使用して、データのソート方法を選択できます。
この項の内容は、次のとおりです。
プロパティ | 説明 |
---|---|
パラメータ・タイプ | 文字列 |
パラメータの有効範囲 | 初期化パラメータ、環境変数、ALTER SESSION およびSQL関数 |
デフォルト値 | NLS_LANGUAGE から導出 |
値の範囲 | BINARY または有効な言語ソート名 |
NLS_SORT
は、文字データのソート・タイプを指定します。NLS_LANGUAGE
から導出されるデフォルト値をオーバーライドします。
NLS_SORT
には、次の値のいずれかが含まれます。
NLS_SORT = BINARY | sort_name
BINARY
はバイナリ・ソートを指定し、sort_
name
は言語ソート基準を指定します。
注意: NLS_SORT パラメータをBINARY に設定すると、オプティマイザは、索引スキャンを選択することで、ソートを行わずにORDER BY 句を実行する場合があります。
|
NLS_SORT
のデフォルト値は、次の方法で変更できます。
初期化パラメータ・ファイル内で値を変更してから、インスタンスを再起動します。
ALTER
SESSION
文を使用します。
プロパティ | 説明 |
---|---|
パラメータ・タイプ | 文字列 |
パラメータの有効範囲 | 初期化パラメータ、環境変数およびALTER SESSION |
デフォルト値 | BINARY |
値の範囲 | BINARY 、LINGUISTIC またはANSI |
NLS_COMP
の値は、SQL操作の比較動作に影響を与えます。
バイナリ比較ではなく言語比較を実行する場合は、NLS_COMP
を使用することで、SQL文にNLSSORT
関数を使用する複雑な処理を回避できます。NLS_COMP
をLINGUISTIC
に設定すると、SQL操作ではNLS_SORT
の値に基づいて言語比較が実行されます。ANSI
は下位互換性を保つために設定します。通常、言語比較を実行する場合は、NLS_COMP
をLINGUISTIC
に設定する必要があります。
次のようにNLS_COMP
をLINGUISTIC
に設定します。
ALTER SESSION SET NLS_COMP = LINGUISTIC;
NLS_COMP
をLINGUISTIC
に設定すると、言語索引によって、言語上の比較のパフォーマンスが向上します。言語索引を使用可能にするには、次の構文を使用します。
CREATE INDEX i ON t(NLSSORT(col, 'NLS_SORT=FRENCH'));
この項の内容は、次のとおりです。
この項の内容は、次のとおりです。
プロパティ | 説明 |
---|---|
パラメータ・タイプ | 文字列 |
パラメータの有効範囲 | 環境変数、初期化パラメータおよびALTER SESSION |
デフォルト値 | BYTE |
値の範囲 | BYTE またはCHAR |
デフォルトでは、文字データ型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 に設定しないことをお薦めします。これによって、多数の既存インストール・スクリプトに文字長さセマンティクスを持つ列が予期せず作成され、バッファ・オーバーフローなどのランタイム・エラーが発生する場合があります。 |