この章の内容は、次のとおりです。
グローバリゼーション・サポート機能により、世界のどこからでも同時に実行できる多言語アプリケーションを開発できるようになります。アプリケーションにより、ユーザー・インタフェースの内容をレンダリングし、各国語およびユーザーのロケール・プリファレンスでデータを処理できます。
この項の内容は次のとおりです。
参照: グローバリゼーション・サポート機能の詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。 |
Oracle Databaseでは、データを各国語で格納、処理、取得できます。データベースには、Oracleがサポートするキャラクタ・セットでエンコードされたスクリプトに記述されているすべての言語を格納できます。Unicodeデータベースとデータ型を使用することで、Oracle Databaseは、ほとんどの現代言語をサポートしています。
一部の言語では、さらなるサポートも利用可能です。たとえばデータベースで、翻訳した月の名前を使用して日付を表示したり、文化的慣習に従ってテキスト・データをソートすることができます。
このマニュアルでは、言語サポートという用語は、特定の言語のテキストを格納する機能ではなく、追加の言語依存機能を指します。たとえば言語サポートには、特定のロケールや文化的慣習による、日付の表示やテキストのソートが含まれます。また、サポートされる言語の一部には、Oracle Databaseによりデータベース・ユーティリティ用に翻訳されたサーバー・メッセージおよび翻訳されたユーザー・インタフェースが提供されます。
参照:
|
Oracle Databaseでは、地域に固有の文化的慣習がサポートされています。デフォルトのローカル時刻書式、日付書式、数値および通貨に関する規則はローカル地域設定によって異なります。異なるNLSパラメータを設定することにより、データベース・セッションにおいて異なる文化的設定を使用できます。たとえば、地域がAMERICA
の場合であっても、指定したデータベース・セッションに対する基本通貨としてユーロ(EUR
)を設定し、補助通貨として日本円(JPY
)を設定できます。
参照:
|
国によって、時刻、曜日、月および年の表記規則は異なります。次に例を示します。
国 | 日付書式 | 例 | 時刻書式 | 例 |
---|---|---|---|---|
中国 | yyyy-mm-dd |
2005-02-28 |
hh24:mi:ss |
13:50:23 |
エストニア | dd.mm.yyyy |
28.02.2005 |
hh24:mi:ss |
13:50:23 |
ドイツ | dd.mm.rr |
28.02.05 |
hh24:mi:ss |
13:50:23 |
英国 | dd/mm/yyyy |
28/02/2005 |
hh24:mi:ss |
13:50:23 |
米国 | mm/dd/yyyy |
02/28/2005 |
hh:mi:ssxff am |
1:50:23.555 PM |
参照:
|
Oracle Databaseでは、地域ごとに次のカレンダ情報を格納します。
週の最初の曜日
ある文化では日曜日ですが、別の文化では月曜日です。 NLS_TERRITORY
パラメータで設定します。
年の最初の暦週
一部の国では、週番号を使用してスケジューリング、計画および会計処理を行います。ISO規格では、暦年の週番号とは異なる週番号を使用できます。たとえば、2005年1月1日は、2004年のISOの週番号53となります。ISOの週は月曜日に始まり、日曜日に終わります。ISO規格をサポートするために、Oracle DatabaseにはIW日付書式要素が用意され、これによってISO週番号が返されます。年の最初の暦週はNLS_TERRITORY
パラメータで設定します。
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です。
暦法はNLS_CALENDAR
パラメータで指定します。
紀元の年
イスラム暦はヒジュラ紀元の年から始まります。日本の元号暦は天皇が即位した最初の年から始まります(たとえば、1998年は平成10年となります)。
参照:
|
国によって、数値と通貨の規則は異なります。次に例を示します。
国 | 数値書式 | 通貨書式 |
---|---|---|
中国 | 1,234,567.89 | ¥1,234.56 |
エストニア | 1 234 567,89 | 1 234,56 kr |
ドイツ | 1.234.567,89 | 1.234,56€ |
英国 | 1,234,567.89 | £1,234.56 |
米国 | 1,234,567.89 | $1,234.56 |
参照:
|
ソート順序(照合順序)は言語によって異なります。また、国や文化が異なると、同じアルファベットでも単語のソート方法が異なります。たとえば、デンマークでは、Zの後にÆがあり、YおよびÜは同じ文字の変形とみなされます。
参照:
|
シングルバイト・キャラクタ・セットの場合、文字列のバイト数と文字数は同じです。マルチバイト・キャラクタ・セットの場合は、1文字または1つのコード・ポイントが1つ以上のバイトで構成されています。可変幅キャラクタ・セットの場合は、バイト長に基づく文字数の計算が困難な場合があります。列の長さをバイト数単位で計算することをバイト・セマンティクス、文字数単位で計算することをキャラクタ・セマンティクスと呼びます。
キャラクタ・セマンティクスは、可変幅のマルチバイト文字列の格納要件を指定する場合に役立ちます。たとえば、Unicodeデータベース(AL32UTF8)に、5文字の英語文字とともに最大5文字の中国語文字を格納できるVARCHAR2
列が必要であるとします。バイト・セマンティクスを使用すると、この列には、長さ3バイトである中国語文字用に15バイトと、長さ1バイトである英語文字用に5バイト、合計20バイトが必要です。キャラクタ・セマンティクスを使用すると、この列に必要な文字数は10となります。
参照:
|
Unicodeは、世界で話されているほとんどの言語のすべての文字を定義した、文字をエンコードするためのシステムです。Unicodeでは、プラットフォーム、プログラムまたは言語を問わず、すべての文字に一意のコードがあります。
Unicode文字は、Oracle Databaseにおいて次の2つの方法で格納できます。
Unicodeデータベースを作成すると、UTF-8でエンコードされた文字をSQL文字データ型(CHAR
、VARCHAR2
、CLOB
およびLONG
)として格納できます。
SQL各国語キャラクタ・データ型の列や変数を宣言できます。
SQL各国語キャラクタ・データ型には、NCHAR
、NVARCHAR2
およびNCLOB
があります。これらはUnicodeデータの格納のみに使用するので、Unicodeデータ型とも呼ばれます。
すべてのSQL各国語キャラクタ・データ型に使用する各国語キャラクタ・セットは、データベースの作成時に指定します。各国語キャラクタ・セットはUTF8またはAL16UTF16(デフォルト)のいずれかに設定できます。
型がNCHAR
かNVARCHAR2
の列や変数を宣言する場合、指定する長さはバイト数ではなく文字数になります。
参照:
|
SQL Developerを除いて、NLSパラメータの初期値は、データベース初期化パラメータによって設定されます。DBAは初期化パラメータ・ファイルで初期化パラメータの値を設定でき、その設定は次回データベースが起動されたときに有効になります。
SQL DeveloperでのNLSパラメータの初期値を表7-1に示します。
表7-1 SQL DeveloperでのNLSパラメータの初期値
パラメータ | 初期値 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
参照: 初期化パラメータと初期化パラメータ・ファイルの詳細は、『Oracle Database管理者ガイド』を参照してください。 |
NLSパラメータの現在の値を表示するには、SQL Developerの各国語サポート・パラメータ・レポートを使用します。
各国語サポート・パラメータ・レポートを表示するには、次の手順を実行します。
SQL Developerメニューの「ビュー」メニューで、「レポート」を選択します。
「レポート」ペインで、「データ・ディクショナリ・レポート」を展開します。
レポートのリストで、「データベース情報」を展開します。
レポートのリストで、「各国語サポート・パラメータ」を選択します。
「接続の選択」ウィンドウで、hr_connを選択します。
「OK」をクリックします。
「接続の選択」ウィンドウが閉じて、「各国語サポート・パラメータ」ペインが表示され、NLSパラメータの名前と現在の値が表示されます。
参照: SQL Developerレポートの詳細は、『Oracle Database SQL Developerユーザーズ・ガイド』を参照してください。 |
1つ以上のNLSパラメータの値を、次のいずれかの方法で変更できます。
現在および今後の、すべてのSQL Developer接続の値を変更します。
クライアントでのみ、NLS環境変数の新しい値によって、対応するNLSパラメータの値を上書きします。
環境変数を使用して、クライアントのロケール依存動作を指定できます。たとえば、Linuxシステムで、次の文はNLS_SORT
環境変数の値をFRENCH
に設定し、NLS_SORT
パラメータの値を上書きします。
% setenv NLS_SORT FRENCH
注意: 環境変数はプラットフォーム依存である場合があります。 |
ALTER
SESSION
文を次の構文で使用して、現在のセッションの値のみを変更します。
ALTER SESSION SET parameter_name=parameter_value [ parameter_name=parameter_value ]... ;
現在のセッションでのみ、前述のすべての方法で設定された値を、新しい値で上書きします。
ALTER
SESSION
を使用して、異なるロケールの設定でアプリケーションをテストできます。
現在のSQLファンクション起動の値のみを変更します。
現在のSQLファンクション起動についてのみ、前述のすべての方法で設定された値を、新しい値で上書きします。
この項の内容は次のとおりです。
参照:
|
次の手順では、現在および今後の、すべてのSQL Developer接続に対するNLSパラメータの値を変更する方法を示します。
各国語サポート・パラメータ値を変更するには、次の手順を実行します。
SQL Developerメニューの「ツール」メニューで、「プリファレンス」を選択します。
「プリファレンス」ウィンドウの左のフレームで、「データベース」を展開します。
データベース・プリファレンスのリストで、「NLS」をクリックします。
NLSパラメータとその現在値が表示されます。値フィールドはメニューになっています。
値を変更する各パラメータの右側にあるメニューで、必要な値を選択します。
「OK」をクリックします。
これで、NLSパラメータが、指定した値になります。これらの値を確認するには、「NLSパラメータ値の表示」を参照してください。
注意: NLSパラメータ値に変更が反映されない場合、「レポートの実行」アイコンをクリックします。 |
参照: SQL Developerのプリファレンスの詳細は、『Oracle Database SQL Developerユーザーズ・ガイド』を参照してください。 |
動作がNLSパラメータの値に依存するSQLファンクションはロケール依存と呼ばれます。ロケール依存のSQLファンクションの一部には、オプションのNLSパラメータがあります。これらのファンクションを次に示します。
TO_CHAR
TO_DATE
TO_NUMBER
NLS_UPPER
NLS_LOWER
NLS_INITCAP
NLSSORT
前述のファンクションでは、次のNLSパラメータを指定できます。
NLS_DATE_LANGUAGE
NLS_DATE_LANGUAGE
NLS_NUMERIC_CHARACTERS
NLS_CURRENCY
NLS_ISO_CURRENCY
NLS_DUAL_CURRENCY
NLS_CALENDAR
NLS_SORT
NLSSORT
ファンクションでは、次のNLSパラメータも指定できます。
NLS_LANGUAGE
NLS_TERRITORY
NLS_DATE_FORMAT
ファンクションでNLSパラメータを指定するには、次の構文を使用します。
'parameter=value' ['parameter=value']...
次の問合せを評価するときに、NLS_DATE_LANGUAGE
をAMERICAN
にすると想定します。
SELECT last_name FROM employees WHERE hire_date > '01-JAN-1999';
問合せを実行する前に、NLS_DATE_LANGUAGE
をAMERICAN
に設定できます。
ALTER SESSION SET NLS_DATE_LANGUAGE=American;
SELECT last_name FROM employees WHERE hire_date > '01-JAN-1999';
または、ロケール依存のSQLファンクションTO_DATE
にオプションのNLS_DATE_LANGUAGE
パラメータを使用して、問合せの内部でNLS_DATE_LANGUAGE
をAMERICAN
に設定できます。
SELECT last_name FROM employees WHERE hire_date > TO_DATE('01-JAN-1999', 'DD-MON-YYYY', 'NLS_DATE_LANGUAGE=AMERICAN');
ヒント: 通常、SQLファンクションでNLSパラメータにセッションのデフォルト値を使用すると、パフォーマンスが改善されます。このため、デフォルトのNLSパラメータ値を使用する必要がないSQL文の場合にのみ、ロケール依存のSQLファンクションでオプションのNLSパラメータを指定します。 |
参照: オプションのNLSパラメータがある、ロケール依存のSQLファンクションの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。 |
この項の内容は次のとおりです。
ロケールとは、システムやアプリケーションを実行する言語的および文化的環境のことです。Oracle Database ソフトウェアでロケールを指定する最も簡単な方法は、NLS_LANG
パラメータを設定することです。
NLS_LANG
パラメータにより、サーバー・セッション(SQL文の処理など)とクライアント・アプリケーション(Oracle Databaseツールの表示の書式など)の両方に対するNLS_LANGUAGE
とNLS_TERRITORY
パラメータのデフォルト値を設定できます。また、NLS_LANG
パラメータで、入力または表示されるデータに対してクライアント・アプリケーションが使用するキャラクタ・セットも設定できます。
NLS_LANG
のデフォルト値は、データベースのインストール中に設定されます。 ALTER
SESSION
文を使用して、NLS_LANG
で設定されるものも含めて、セッションに対するNLSパラメータの値を変更できます。ただし、クライアント環境のNLS設定を変更できるのは、そのクライアントのみです。
参照:
|
指定内容: データベースのデフォルト言語。次の項目に対するデフォルト規則を指定します。
サーバー・メッセージの言語
曜日および月の名前と略称の言語は、SQLファンクションTO_CHAR
およびTO_DATE
で指定されます
AM、PM、ADおよびBCに相当する、デフォルト言語の記号
ORDER
BY
句が指定された場合の、文字データに対するデフォルトのソート順序
記述方向
肯定および否定応答の文字列(たとえばYES
とNO
)
許容可能な値: Oracleがサポートする言語名。リストは、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。
デフォルト値: NLS_LANG
によって設定されます。詳細は、「ロケールとNLS_LANGパラメータについて」を参照してください。
デフォルト値の設定対象:
NLS_DATE_LANGUAGE
(「NLS_DATE_LANGUAGEパラメータについて」を参照)
NLS_SORT
(「NLS_SORTパラメータについて」を参照)
例7-1では、NLS_LANGUAGE
をITALIAN
およびGERMAN
に設定した場合に、サーバー・メッセージや月の略称にどのように影響するかを示します。
この例をSQL Developerで試す場合は、ワークシートに文や問合せを入力します。ワークシートの詳細は、「SQL Developerにおける問合せの実行」を参照してください。ここに示す結果はSQL*Plusによるもので、SQL Developerとは書式が若干異なります。
例7-1 NLS_LANGUAGEによるサーバー・メッセージおよび月の略称への影響
NLS_LANGUAGE
の現在の値を書き留めます。
手順1の値がITALIAN
でない場合は変更します。
ALTER SESSION SET NLS_LANGUAGE=ITALIAN;
存在しない表に問合せをします。
SELECT * FROM nonexistent_table;
結果:
SELECT * FROM nonexistent_table
*
ERROR at line 1:
ORA-00942: tabella o vista inesistente
次の問合せを実行します。
SELECT LAST_NAME, HIRE_DATE FROM EMPLOYEES WHERE EMPLOYEE_ID IN (111, 112, 113);
結果:
LAST_NAME HIRE_DATE ------------------------- --------- Sciarra 30-SET-97 Urman 07-MAR-98 Popp 07-DIC-99 3 rows selected.
NLS_LANGUAGE
の値をGERMAN
に変更します。
ALTER SESSION SET NLS_LANGUAGE=GERMAN;
手順3の問合せを繰り返します。
結果:
SELECT * FROM nonexistent_table
*
ERROR at line 1:
ORA-00942: Tabelle oder View nicht vorhanden
手順4の問合せを繰り返します。
結果:
LAST_NAME HIRE_DATE ------------------------- --------- Sciarra 30-SEP-97 Urman 07-MRZ-98 Popp 07-DEZ-99 3 rows selected.
NLS_LANGUAGE
を手順1の値に設定します。
参照:
|
日付書式
タイムスタンプ書式
小数点文字およびグループ・セパレータ
各国通貨記号
ISO通貨記号
二重通貨記号
許容可能な値: Oracleがサポートする地域名。リストは、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。
デフォルト値: NLS_LANG
によって設定されます。詳細は、「ロケールとNLS_LANGパラメータについて」を参照してください。
デフォルト値の設定対象:
NLS_DATE_FORMAT
(「NLS_DATE_FORMATパラメータについて」を参照)
NLS_TIMESTAMP_FORMAT
およびNLS_TIMESTAMP_TZ_FORMAT
(「NLS_TIMESTAMP_FORMATおよびNLS_TIMESTAMP_TZ_FORMATパラメータについて」を参照)
NLS_NUMERIC_CHARACTERS
(「NLS_NUMERIC_CHARACTERSパラメータについて」を参照)
NLS_CURRENCY
(「NLS_CURRENCYパラメータについて」を参照)
NLS_ISO_CURRENCY
(「NLS_ISO_CURRENCYパラメータについて」を参照)
NLS_DUAL_CURRENCY
(「NLS_DUAL_CURRENCYパラメータについて」を参照)
例7-2では、NLS_TERRITORY
をJAPAN
およびAMERICA
に設定した場合に、通貨記号にどのように影響するかを示します。
この例をSQL Developerで試す場合は、ワークシートに文や問合せを入力します。ワークシートの詳細は、「SQL Developerにおける問合せの実行」を参照してください。ここに示す結果はSQL*Plusによるもので、SQL Developerとは書式が若干異なります。
例7-2 NLS_TERRITORYによる通貨記号への影響
NLS_TERRITORY
の現在の値を書き留めます。
手順1の値がJAPAN
でない場合は変更します。
ALTER SESSION SET NLS_TERRITORY=JAPAN;
次の問合せを実行します。
SELECT TO_CHAR(SALARY,'L99G999D99') SALARY FROM EMPLOYEES WHERE EMPLOYEE_ID IN (100, 101, 102);
結果:
SALARY -------------------- ¥24,000.00 ¥17,000.00 ¥17,000.00 3 rows selected.
NLS_TERRITORY
の値をAMERICA
に変更します。
ALTER SESSION SET NLS_TERRITORY=AMERICA;
手順3の問合せを繰り返します。
結果:
SALARY -------------------- $24,000.00 $17,000.00 $17,000.00 3 rows selected.
NLS_TERRITORY
を手順1の値に設定します。
参照:
|
指定内容: TO_CHAR
およびTO_DATE
ファンクション(「問合せにおける変換ファンクションの使用」を参照)で使用するデフォルトの日付書式。
許容可能な値: 有効な任意の日付時間書式モデル。次に例を示します。
NLS_DATE_FORMAT='MM/DD/YYYY'
日付時間書式モデルの詳細は、『Oracle Database SQL言語リファレンス』を参照してください。
デフォルト値: NLS_TERRITORY
によって設定されます。詳細は、「NLS_TERRITORYパラメータについて」を参照してください。
デフォルトの日付書式が、特定の地域で使用される規則に対応していない場合があります。ローカライズされた書式で日付を取得するために、'DS'
(短い日付)書式および'DL'
(長い日付)書式を使用できます。
例7-3では、NLS_TERRITORY
をAMERICA
およびFRANCE
に設定した場合に、デフォルトの日付書式、短い日付書式および長い日付書式にどのように影響するかを示します。
この例をSQL Developerで試す場合は、ワークシートに文や問合せを入力します。ワークシートの詳細は、「SQL Developerにおける問合せの実行」を参照してください。ここに示す結果はSQL*Plusによるもので、SQL Developerとは書式が若干異なります。
例7-3 NLS_TERRITORYによる日付記号への影響
NLS_TERRITORY
の現在の値を書き留めます。
手順1の値がAMERICA
でない場合は変更します。
ALTER SESSION SET NLS_TERRITORY=AMERICA;
次の問合せを実行します。
SELECT hire_date "Default", TO_CHAR(hire_date,'DS') "Short", TO_CHAR(hire_date,'DL') "Long" FROM employees WHERE employee_id IN (111, 112, 113);
結果:
Default Short Long --------- ---------- ----------------------------- 30-SEP-05 9/30/2005 Friday, September 30, 2005 07-MAR-98 3/7/2006 Tuesday, March 07, 2006 07-DEC-99 12/7/2007 Friday, December 07, 2007 3 rows selected.
NLS_TERRITORY
の値をFRANCE
に変更します。
ALTER SESSION SET NLS_TERRITORY=FRANCE;
手順3の問合せを繰り返します。
結果:
Default Short Long -------- ---------- --------------------------- 30/09/05 30/09/2005 friday 30 september 2005 07/03/06 07/03/2006 tuesday 7 march 2006 07/12/07 07/12/2007 friday 7 december 2007 3 rows selected.
(フランス語の曜日名と月名を取得するには、問合せを実行する前に、NLS_LANGUAGE
またはNLS_DATE_LANGUAGE
をFRENCH
に設定する必要があります。)
NLS_TERRITORY
を手順1の値に設定します。
例7-4では、NLS_DATE_FORMAT
の値を変更し、NLS_TERRITORY
によって設定されたデフォルト値を上書きします。
この例をSQL Developerで試す場合は、ワークシートに文や問合せを入力します。ワークシートの詳細は、「SQL Developerにおける問合せの実行」を参照してください。ここに示す結果はSQL*Plusによるもので、SQL Developerとは書式が若干異なります。
例7-4 NLS_DATE_FORMATによるNLS_TERRITORYの上書き
NLS_TERRITORY
とNLS_DATE_FORMAT
の現在の値を書き留めます。
手順1
でNLS_TERRITORYの値がAMERICA
でない場合は、次のように変更します。
ALTER SESSION SET NLS_TERRITORY=AMERICA;
手順1
でNLS_DATE_FORMATの値が'Day Month ddth'
でない場合は、次のように変更します。
ALTER SESSION SET NLS_DATE_FORMAT='Day Month ddth';
次の問合せを実行します(前述の例の手順3より)。
SELECT hire_date "Default", TO_CHAR(hire_date,'DS') "Short", TO_CHAR(hire_date,'DL') "Long" FROM employees WHERE employee_id IN (111, 112, 113);
結果:
Default Short Long ------------------------ ---------- ----------------------------- Friday September 30th 9/30/2005 Tuesday, September 30, 2005 Tuesday March 07th 3/7/2006 Saturday, March 07, 2006 Friday December 07th 12/7/2007 Tuesday, December 07, 2007 3 rows selected.
NLS_TERRITORY
とNLS_DATE_FORMAT
を手順1の値に設定します。
参照:
|
指定内容: 次の項目で出力される曜日および月の名前と略称の言語
SQLファンクションTO_CHAR
およびTO_DATE
(「問合せにおける変換ファンクションの使用」を参照)
デフォルトの日付書式(「NLS_DATE_FORMATパラメータについて」
で説明されているNLS_DATE_FORMATによって設定)
AM、PM、ADおよびBCに相当する、デフォルト言語の記号
許容可能な値: Oracleがサポートする言語名。リストは、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。
デフォルト値: NLS_LANGUAGE
によって設定されます。詳細は、「NLS_LANGUAGEパラメータについて」を参照してください。
例7-5では、NLS_DATE_LANGUAGE
をFRENCH
およびSWEDISH
に設定した場合に、表示されるシステム日付にどのように影響するかを示します。
この例をSQL Developerで試す場合は、ワークシートに文や問合せを入力します。ワークシートの詳細は、「SQL Developerにおける問合せの実行」を参照してください。ここに示す結果はSQL*Plusによるもので、SQL Developerとは書式が若干異なります。
例7-5 NLS_DATE_LANGUAGEによる、表示されるSYSDATEへの影響
NLS_DATE_LANGUAGE
の現在の値を書き留めます。
手順1
でNLS_DATE_LANGUAGEの値がFRENCH
でない場合は変更します。
ALTER SESSION SET NLS_DATE_LANGUAGE=FRENCH;
次の問合せを実行します。
SELECT TO_CHAR(SYSDATE, 'Day:Dd Month yyyy') "System Date" FROM DUAL;
結果:
System Date -------------------------- Vendredi:28 December 2012
NLS_DATE_LANGUAGE
の値をSWEDISH
に変更します。
ALTER SESSION SET NLS_DATE_LANGUAGE=SWEDISH;
手順3の問合せを繰り返します。
結果:
System Date ------------------------- Fredag :28 December 2012
NLS_DATE_LANGUAGE
を手順1の値に設定します。
参照:
|
TIMESTAMP
オーディオテープ
TIMESTAMP
WITH
LOCAL
TIME
ZONE
オーディオテープ
許容可能な値: 有効な任意の日付時間書式モデル。次に例を示します。
NLS_TIMESTAMP_FORMAT='YYYY-MM-DD HH:MI:SS.FF' NLS_TIMESTAMP_TZ_FORMAT='YYYY-MM-DD HH:MI:SS.FF TZH:TZM'
日付時間書式モデルの詳細は、『Oracle Database SQL言語リファレンス』を参照してください。
デフォルト値: NLS_TERRITORY
によって設定されます。詳細は、「NLS_TERRITORYパラメータについて」を参照してください。
参照:
|
許容可能な値: Oracleがサポートする暦法。リストは、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。
デフォルト値: Gregorian
例7-6では、NLS_CALENDAR
を'English Hijrah'
およびGregorian
に設定した場合に、表示されるシステム日付にどのように影響するかを示します。
この例をSQL Developerで試す場合は、ワークシートに文や問合せを入力します。ワークシートの詳細は、「SQL Developerにおける問合せの実行」を参照してください。ここに示す結果はSQL*Plusによるもので、SQL Developerとは書式が若干異なります。
例7-6 NLS_CALENDARによる、表示されるSYSDATEへの影響
NLS_CALENDAR
の現在の値を書き留めます。
手順1
で、NLS_CALENDARの値が'English Hijrah'
でない場合は変更します。
ALTER SESSION SET NLS_CALENDAR='English Hijrah';
次の問合せを実行します。
SELECT SYSDATE FROM DUAL;
結果:
SYSDATE
-------------------------
17 Safar 1434
NLS_CALENDAR
の値を'Gregorian'
に変更します。
ALTER SESSION SET NLS_CALENDAR='Gregorian';
次の問合せを実行します。
SELECT SYSDATE FROM DUAL;
結果:
SYSDATE
---------
31-DEC-12
NLS_CALENDAR
を手順1の値に設定します。
参照:
|
指定内容: 小数点文字(数値の整数部と小数部を区切る文字)およびグループ・セパレータ(千や100万などを示すために整数グループを区切る文字)。この文字は数値書式要素G
で戻されます。
許容可能な値: 次の文字以外の、任意の異なる2つのシングルバイト文字。
数字
プラス(+)
マイナス(-)
小なり(<)
大なり(>)
デフォルト値: NLS_TERRITORY
によって設定されます。詳細は、「NLS_TERRITORYパラメータについて」を参照してください。
SQL文では数値を次のいずれかの方法で表現できます。
数値リテラル
数値リテラルは引用符で囲まず、小数点文字として常にピリオド(.)を使用し、グループ・セパレータは含めません。
テキスト・リテラル
テキスト・リテラルは一重引用符で囲みます。テキスト・リテラルは、必要に応じて、現行のNLS設定に従って暗黙的または明示的に数値に変換されます。
例7-7では、2つの異なるNLS_NUMERIC_CHARACTERS
の設定により、同じ問合せの表示結果にどのような影響があるかを示します。
この例をSQL Developerで試す場合は、ワークシートに文や問合せを入力します。ワークシートの詳細は、「SQL Developerにおける問合せの実行」を参照してください。ここに示す結果はSQL*Plusによるもので、SQL Developerとは書式が若干異なります。
例7-7 NLS_NUMERIC_CHARACTERSによる小数点文字とグループ・セパレータへの影響
NLS_NUMERIC_CHARACTERS
の現在の値を書き留めます。
手順1
で、NLS_NUMERIC_CHARACTERSの値が",."
(小数点文字はカンマ、グループ・セパレータはピリオド)でない場合は変更します。
ALTER SESSION SET NLS_NUMERIC_CHARACTERS=",.";
次の問合せを実行します。
SELECT TO_CHAR(4000, '9G999D99') "Number" FROM DUAL;
結果:
Number --------- 4.000,00
NLS_NUMERIC_CHARACTERS
の値を",."
(小数点文字はピリオド、グループ・セパレータはカンマ)に変更します。
ALTER SESSION SET NLS_NUMERIC_CHARACTERS=".,";
次の問合せを実行します。
SELECT TO_CHAR(4000, '9G999D99') "Number" FROM DUAL;
結果:
Number --------- 4,000.00
NLS_NUMERIC_CHARACTERS
を手順1の値に設定します。
参照:
|
指定内容: 各国通貨記号(数値書式要素L
で戻される文字列)。
許容可能な値: 任意の有効な通貨記号文字列。
デフォルト値: NLS_TERRITORY
によって設定されます。詳細は、「NLS_TERRITORYパラメータについて」を参照してください。
例7-8では、NLS_CURRENCY
の値を変更し、NLS_TERRITORY
によって設定されたデフォルト値を上書きします。
この例をSQL Developerで試す場合は、ワークシートに文や問合せを入力します。ワークシートの詳細は、「SQL Developerにおける問合せの実行」を参照してください。ここに示す結果はSQL*Plusによるもので、SQL Developerとは書式が若干異なります。
例7-8 NLS_CURRENCYによるNLS_TERRITORYの上書き
NLS_TERRITORY
とNLS_CURRENCY
の現在の値を書き留めます。
手順1
でNLS_TERRITORYの値がAMERICA
でない場合は、次のように変更します。
ALTER SESSION SET NLS_TERRITORY=AMERICA;
次の問合せを実行します。
SELECT TO_CHAR(salary, 'L099G999D99') "Salary" FROM EMPLOYEES WHERE salary > 13000;
結果:
Salary --------------------- $024,000.00 $017,000.00 $017,000.00 $014,000.00 $013,500.00
NLS_CURRENCY
の値を'¥'
に変更します。
ALTER SESSION SET NLS_CURRENCY='¥';
次の問合せを実行します。
SELECT TO_CHAR(salary, 'L099G999D99') "Salary" FROM EMPLOYEES WHERE salary > 13000;
結果:
Salary --------------------- ¥024,000.00 ¥017,000.00 ¥017,000.00 ¥014,000.00 ¥013,500.00
NLS_TERRITORY
とNLS_CURRENCY
を手順1の値に設定します。
参照:
|
指定内容: ISO通貨記号(数値書式要素C
で戻される文字列)。
許容可能な値: 任意の有効な通貨記号文字列。
デフォルト値: NLS_TERRITORY
によって設定されます。詳細は、「NLS_TERRITORYパラメータについて」を参照してください。
各国通貨記号は不明確なことがありますが、ISO通貨記号は一意です。
例7-9では、地域AUSTRALIA
およびAMERICA
は各国通貨記号が同じですが、ISO通貨記号は異なることを示します。
この例をSQL Developerで試す場合は、ワークシートに文や問合せを入力します。ワークシートの詳細は、「SQL Developerにおける問合せの実行」を参照してください。ここに示す結果はSQL*Plusによるもので、SQL Developerとは書式が若干異なります。
例7-9 NLS_ISO_CURRENCY
NLS_TERRITORY
とNLS_ISO_CURRENCY
の現在の値を書き留めます。
手順1
でNLS_TERRITORYの値がAUSTRALIA
でない場合は変更します。
ALTER SESSION SET NLS_TERRITORY=AUSTRALIA;
次の問合せを実行します。
SELECT TO_CHAR(salary, 'L099G999D99') "Local", TO_CHAR(salary, 'C099G999D99') "ISO" FROM EMPLOYEES WHERE salary > 15000;
結果:
Local ISO --------------------- ------------------ $024,000.00 AUD024,000.00 $017,000.00 AUD017,000.00 $017,000.00 AUD017,000.00
NLS_TERRITORY
の値をAMERICA
に変更します。
ALTER SESSION SET NLS_TERRITORY=AMERICA;
次の問合せを実行します。
SELECT TO_CHAR(salary, 'L099G999D99') "Local", TO_CHAR(salary, 'C099G999D99') "ISO" FROM EMPLOYEES WHERE salary > 15000;
結果:
Local ISO --------------------- ------------------ $024,000.00 USD024,000.00 $017,000.00 USD017,000.00 $017,000.00 USD017,000.00
NLS_TERRITORY
とNLS_ISO_CURRENCY
を手順1の値に設定します。
参照:
|
指定内容: 二重通貨記号(ユーロ移行期間中にユーロ通貨記号をサポートするために導入されました)。
許容可能な値: 任意の有効な通貨記号文字列。
デフォルト値: NLS_TERRITORY
によって設定されます。詳細は、「NLS_TERRITORYパラメータについて」を参照してください。
参照:
|
指定内容: ORDER
BY
句がある問合せの言語ソート順序(照合順序)。
許容可能な値:
BINARY
ソート順序は、データ型に応じて、データベース・キャラクタ・セットまたは各国キャラクタ・セットのバイナリ・ソート順序に基づいています。
Oracleがサポートする任意の言語ソート名
ソート順序は、指定した言語ソート名の順序に基づいています。通常、言語ソート名は言語名と同じですが、異なる場合もあります。サポートされている言語ソート名のリストは、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。
デフォルト値: NLS_LANGUAGE
によって設定されます。詳細は、「NLS_LANGUAGEパラメータについて」を参照してください。
例7-10では、2つの異なるNLS_SORT
の設定により、同じ問合せの表示結果にどのような影響があるかを示します。設定は、BINARY
と従来のスペイン語(SPANISH_M
)です。従来のスペイン語では、ch、llおよびñをそれぞれc、lおよびnに続く文字として扱います。
この例をSQL Developerで試す場合は、ワークシートに文や問合せを入力します。ワークシートの詳細は、「SQL Developerにおける問合せの実行」を参照してください。ここに示す結果はSQL*Plusによるもので、SQL Developerとは書式が若干異なります。
例7-10 NLS_SORTによる言語ソート順序への影響
スペイン語の単語の表を作成します。
CREATE TABLE temp (name VARCHAR2(15));
表にスペイン語の単語を移入します。
INSERT INTO temp (name) VALUES ('laguna'); INSERT INTO temp (name) VALUES ('llama'); INSERT INTO temp (name) VALUES ('loco');
NLS_SORT
の現在の値を書き留めます。
手順3
でNLS_SORTの値がBINARY
でない場合は、次のように変更します。
ALTER SESSION SET NLS_SORT=BINARY;
次の問合せを実行します。
SELECT * FROM temp ORDER BY name;
結果:
NAME --------------- laguna llama loco
NLS_SORT
の値をSPANISH_M
(従来のスペイン語)に変更します。
ALTER SESSION SET NLS_SORT=SPANISH_M;
手順5の問合せを繰り返します。
結果:
NAME --------------- laguna loco llama
表を削除します。
DROP TABLE temp;
NLS_SORT
を手順3の値に設定します。
大/小文字およびアクセントを区別しないソート
Oracle Databaseの操作では、大/小文字および文字のアクセントが区別されます。大/小文字を区別しないソートを実行するには、NLS_SORT
パラメータの値に_CI
を付け加えます(BINARY_CI
やXGERMAN_CI
など)。大/小文字および文字のアクセントのどちらも区別しないソートを実行するには、NLS_SORT
パラメータの値に_AI
を付け加えます(BINARY_AI
やFRENCH_M_AI
など)。
参照:
|
許容可能な値:
BINARY
SQLで、文字のバイナリ・コードを比較します。バイナリ・コードが高い方の文字が、もう一方の文字よりも大きくなります。
LINGUISTIC
SQLで、NLS_SORT
パラメータの値に基づいた言語比較を実行します。詳細は、「NLS_SORTパラメータについて」を参照してください。
ANSI
この値は、下位互換性のみを目的として用意されています。
デフォルト値: BINARY
例7-11では、NLS_COMP
設定に応じた問合せの結果を示します。
この例をSQL Developerで試す場合は、ワークシートに文や問合せを入力します。ワークシートの詳細は、「SQL Developerにおける問合せの実行」を参照してください。ここに示す結果はSQL*Plusによるもので、SQL Developerとは書式が若干異なります。
例7-11 NLS_COMPによるSQL文字比較への影響
NLS_SORT
とNLS_COMP
の現在の値を書き留めます。
手順1
で、NLS_SORT
とNLS_COMPの値がそれぞれSPANISH_M
(従来のスペイン語)とBINARY
でない場合は変更します。
ALTER SESSION SET NLS_SORT=SPANISH_M NLS_COMP=BINARY;
次の問合せを実行します。
SELECT LAST_NAME FROM EMPLOYEES WHERE LAST_NAME LIKE 'C%';
結果:
LAST_NAME ------------------------- Cabrio Cambrault Cambrault Chen Chung Colmenares 6 rows selected
NLS_COMP
の値をLINGUISTIC
に変更します。
ALTER SESSION SET NLS_COMP=LINGUISTIC;
手順3の問合せを繰り返します。
結果:
LAST_NAME ------------------------- Cabrio Cambrault Cambrault Colmenares 4 rows selected
従来のスペイン語ではch
をc
に続く1文字として扱うため、ここではChenとChungは返されません。
NLS_SORT
とNLS_COMP
を手順1の値に設定します。
参照:
|
指定広告: 文字データ型CHAR
、VARCHAR2
、LONG
の列の長さセマンティクス。これらの列がバイトまたは文字のいずれかで指定されるかを指定します(パラメータ設定後に宣言された列にのみ適用可能)。
許容可能な値:
BYTE
新しいCHAR
、VARCHAR2
およびLONG
の列をバイト単位で指定します。
CHAR
新しいCHAR
、VARCHAR2
およびLONG
の列を文字単位で指定します。
デフォルト値: BYTE
この例をSQL Developerで試す場合は、ワークシートに文や問合せを入力します。ワークシートの詳細は、「SQL Developerにおける問合せの実行」を参照してください。ここに示す結果はSQL*Plusによるもので、SQL Developerとは書式が若干異なります。
例7-12 NLS_LENGTH_SEMANTICSがVARCHAR2列の格納に与える影響
NLS_LENGTH_SEMANTICS
の現在の値を書き留めます。
手順1
で、NLS_LENGTH_SEMANTICSの値がBYTE
でない場合は変更します。
ALTER SESSION SET NLS_LENGTH_SEMANTICS=BYTE;
VARCHAR2
列のある表を作成します。
CREATE TABLE SEMANTICS_BYTE(SOME_DATA VARCHAR2(20));
「接続」タブをクリックします。
「接続」フレームで、hr_connを展開します。
スキーマ・オブジェクト・タイプのリストで、「表」を展開します。
表のリストで、SEMANTICS_BYTEを選択します。
「接続」フレームの右側にある「列」ペインに、「列名」SOME_DATA
の「データ型」がVARCHAR2(20 BYTE)
であると表示されます。
NLS_LENGTH_SEMANTICS
の値をCHAR
に変更します。
ALTER SESSION SET NLS_LENGTH_SEMANTICS=CHAR;
VARCHAR2
列のある別の表を作成します。
CREATE TABLE SEMANTICS_CHAR(SOME_DATA VARCHAR2(20));
「接続」フレームで、「リフレッシュ」アイコンをクリックします。
今回はSEMANTICS_CHAR
を含む表のリストが表示されます。
SEMANTICS_CHARを選択します。
「列」ペインに、「列名」SOME_DATA
の「データ型」がVARCHAR2(20 CHAR)
であると表示されます。
SEMANTICS_BYTEを再び選択します。
「列」ペインに、「列名」SOME_DATA
の「データ型」がVARCHAR2(20 BYTE)
であると表示されます。
NLS_LENGTH_SEMANTICS
を手順1の値に設定します。
参照:
|
Unicodeデータは挿入および取得できます。データはデータベースおよびクライアント間で透過的に変換され、クライアント・プログラムがデータベース・キャラクタ・セットおよび各国キャラクタ・セットから独立していることを保証します。
この項の内容は次のとおりです。
参照:
|
SQLとPL/SQLでUnicode文字列リテラルを表現する方法は3つあります。
N'
string
'
例: N'résumé'
制限: 「キャラクタ・セット変換中のデータ消失の回避」を参照してください。
NCHR(
number
)
SQLファンクションNCHR
は、各国語キャラクタ・セットでバイナリがnumber
に相当する文字を返します。返される文字のデータ型はNVARCHAR2
です。
例: NCHR(36)
は、デフォルトの各国語キャラクタ・セットであるAL16UTF16では、$
を表します。
制限: NCHR(
number
)
の値の移植性は、同じ各国語キャラクタ・セットを使用するアプリケーションに限定されます。
UNISTR('
string
')
SQLファンクションUNISTR
では、string
を各国語キャラクタ・セットに変換します。
移植性とデータ保護のために、string
に含めるのはASCII文字とUnicodeエンコーディング値のみとすることをお薦めします。Unicodeエンコーディング値は\xxxx
という形式をとり、xxxx
はUCS-2エンコーディング形式で文字コード値を表す16進値です。
例: UNISTR('G\0061ry')
は'Gary'
を表します。
ASCII文字は、データベース・キャラクタ・セットに変換されてから、各国語キャラクタ・セットに変換されます。Unicodeエンコーディング値は、各国語キャラクタ・セットに直接変換されます。
参照:
|
SQLまたはPL/SQL文の一部として、リテラル(接頭辞N
あり、またはなし)が、文の残りとして、同じキャラクタ・セットでエンコードされます。クライアント側では、文はNLS_LANG
パラメータで決定されるクライアントのキャラクタ・セットでエンコードされます。サーバー側では、文はデータベースのキャラクタ・セットでエンコードされます。
SQLまたはPL/SQL文がクライアントからデータベースに送信されると、それに応じてキャラクタ・セットが変換されます。クライアントがテキスト・リテラルで使用しているすべての文字がデータベース・キャラクタ・セットに含まれていない場合、データはこの変換で消失します。NCHAR
文字列リテラルはデータベース・キャラクタ・セットに依存しないよう設計されているため、CHAR
テキスト・リテラルよりも影響を受けやすくなります。
互換性のないデータベース・キャラクタ・セットへの変換時のデータ消失を回避するために、NCHAR
リテラル置換機能を有効にすることができます。詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。