7 グローバル環境での作業
グローバリゼーション・サポートにより、多言語アプリケーションを世界のどこからでも同時に実行できます。アプリケーションにより、ユーザー・インタフェースの内容をレンダリングし、各国語およびユーザーのロケール・プリファレンスでデータを処理できます。
- グローバリゼーション・サポート機能について
グローバリゼーション・サポート機能により、世界のどこからでも同時に実行できる多言語アプリケーションを開発できるようになります。アプリケーションにより、ユーザー・インタフェースの内容をレンダリングし、各国語およびユーザーのロケール・プリファレンスでデータを処理できます。 - NLSパラメータの初期値について
SQL Developer以外では、NLSパラメータの初期値はデータベース初期化パラメータで設定されます。 - NLSパラメータ値の表示
NLSパラメータの現在の値を表示するには、SQL Developerの各国語サポート・パラメータ・レポートを使用します。 - NLSパラメータ値の変更
1つ以上のNLSパラメータの値を、次のいずれかの方法で変更できます。 - 各NLSパラメータについて
多くのNLSパラメータを利用できます。 - グローバルなアプリケーションでのUnicodeの使用方法
Unicodeデータを挿入および取得できます。データはデータベースおよびクライアント間で透過的に変換され、クライアント・プログラムがデータベース・キャラクタ・セットおよび各国キャラクタ・セットから独立していることを保証します。
7.1 グローバリゼーション・サポート機能について
グローバリゼーション・サポートにより、世界のどこからでも同時に実行できる多言語アプリケーションを開発できるようになります。アプリケーションにより、ユーザー・インタフェースの内容をレンダリングし、各国語およびユーザーのロケール・プリファレンスでデータを処理できます。
注意:
以前は、グローバリゼーション・サポートを各国語サポート(NLS)と呼んでいましたが、実際にはNLSはグローバリゼーション・サポートのサブセットです。NLSは、各国の言語を選択し、特定のキャラクタ・セットを使用してデータを格納する機能です。NLSは、NLSパラメータで実装します。
- 言語サポートについて
Oracle Databaseでは、データを各国語で格納、処理、取得できます。データベースには、Oracleがサポートするキャラクタ・セットでエンコードされたスクリプトに記述されているすべての言語を格納できます。Unicodeデータベースとデータ型を使用することで、Oracle Databaseは、ほとんどの現代言語をサポートしています。 - 地域サポートについて
デフォルトのローカル時刻書式、日付書式、数値および通貨に関する規則はローカル地域設定によって異なります。 - 日付および時刻書式について
国によって、時刻、曜日、月および年の表記規則は異なります。 - カレンダ書式について
国ごとに異なるカレンダを使用します。 - 数値および通貨の書式について
国によって、数値と通貨の規則は異なります。 - 言語ソートと文字列検索について
ソート順序(照合順序)は言語によって異なります。また、国や文化が異なると、同じアルファベットでも単語のソート方法が異なります。たとえば、デンマークでは、Zの後にÆがあり、YおよびÜは同じ文字の変形とみなされます。 - 長さセマンティクスについて
文字列内の文字数をバイト長を使用して計算するには、キャラクタ・セット内の各文字のバイト数を知る必要があります。 - UnicodeおよびSQL各国語キャラクタ・データ型について
Unicodeは、世界中で話されているほとんどの言語のあらゆる文字を定義する文字エンコード・システムです。Unicodeでは、プラットフォーム、プログラムまたは言語を問わず、すべての文字に一意のコードがあります。
関連項目:
グローバリゼーション・サポート機能の詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。
7.1.1 言語サポートについて
Oracle Databaseでは、データの格納、処理および取出しをネイティブ言語で行うことができます。データベースには、Oracleがサポートするキャラクタ・セットでエンコードされたスクリプトに記述されているすべての言語を格納できます。Unicodeデータベースとデータ型を使用することで、Oracle Databaseは、ほとんどの現代言語をサポートしています。
各国語のサブセットに対しては、追加サポートが用意されています。たとえば、データベースでは、翻訳された月の名前を使用して日付を表示し、文化的な慣習に従ってテキスト・データをソートできます。
このマニュアルでは、言語サポートという用語は、特定の言語のテキストを格納する機能ではなく、追加の言語依存機能を指します。たとえば、言語サポートには、特定のロケールおよび文化的慣習に従った日付の表示やテキストのソートが含まれます。また、サポートされる言語の一部には、Oracle Databaseによりデータベース・ユーティリティ用に翻訳されたサーバー・メッセージおよび翻訳されたユーザー・インタフェースが提供されます。
関連項目:
-
Oracle Databaseがサポートする言語のリストは、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。
-
Oracle Databaseのメッセージが翻訳されている言語のリストは、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。
7.1.2 地域サポートについて
デフォルトのローカル時刻書式、日付書式、数値および通貨に関する規則はローカル地域設定によって異なります。
Oracle Databaseでは、地域に固有な文化的慣習をサポートしています。デフォルトのローカル時刻書式、日付書式、数値および通貨に関する規則はローカル地域設定によって異なります。異なるNLSパラメータを設定することにより、データベース・セッションにおいて異なる文化的設定を使用できます。たとえば、地域がAMERICA
の場合であっても、指定したデータベース・セッションに対する基本通貨としてユーロ(EUR
)を設定し、補助通貨として日本円(JPY
)を設定できます。
関連項目:
-
Oracle Databaseがサポートする地域のリストは、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。
7.1.3 日付および時刻書式について
国ごとに、時、日、月および年を表示する規則があります。
たとえば、この表は、5か国の日付および時刻のローカル書式とその例を示しています。
国 | 日付書式 | 例 | 時刻書式 | 例 |
---|---|---|---|---|
中国 |
|
|
|
|
エストニア |
|
|
|
|
ドイツ |
|
|
|
|
英国 |
|
|
|
|
米国 |
|
|
|
|
関連項目:
-
日時データ型およびタイムゾーン・サポートの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。
-
日付と時刻の書式の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。
7.1.4 カレンダ書式について
国ごとに、異なるカレンダを使用します。
Oracle Databaseは、各地域のカレンダ情報を格納しています。
-
週の最初の曜日
ある文化では日曜日ですが、別の文化では月曜日です。 NLS_TERRITORYパラメータで設定します。
-
年の最初の暦週
一部の国では、週番号を使用してスケジューリング、計画および会計処理を行います。ISO規格では、暦年の週番号とは異なる週番号を使用できます。たとえば、2005年1月1日は、2004年のISOの週番号53となります。ISOの週は月曜日に始まり、日曜日に終わります。ISO規格をサポートするために、Oracleには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年となります)。
関連項目:
-
カレンダ書式の詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。
7.1.5 数値および通貨の書式について
数値と通貨の規則は国によって異なります。
この表は、5か国の数値および通貨のローカル書式とその例を示しています。
国 | 数値書式 | 通貨書式 |
---|---|---|
中国 |
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 |
関連項目:
-
数値とリストのパラメータの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。
-
通貨パラメータの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。
-
数値書式モデルの詳細は、『Oracle Database SQL言語リファレンス』 を参照してください。
7.1.6 言語ソートと文字列検索について
ソート順序(照合順序)は言語によって異なります。また、国や文化が異なると、同じアルファベットでも単語のソート方法が異なります。たとえば、デンマークでは、Zの後にÆがあり、YおよびÜは同じ文字の変形とみなされます。
関連項目:
-
言語ソートと文字列検索の詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。
7.1.7 長さセマンティクスについて
文字列内の文字数をバイト長を使用して計算するには、キャラクタ・セット内の各文字のバイト数を知る必要があります。
シングルバイト・キャラクタ・セットの場合、文字列のバイト数と文字数は同じです。マルチバイト・キャラクタ・セットの場合は、1文字または1つのコード・ポイントが1つ以上のバイトで構成されています。可変幅キャラクタ・セットの場合は、バイト長に基づく文字数の計算が困難な場合があります。列の長さをバイト数単位で計算することをバイト・セマンティクス、文字数単位で計算することをキャラクタ・セマンティクスと呼びます。
キャラクタ・セマンティクスは、可変幅のマルチバイト文字列の格納要件を指定する場合に役立ちます。たとえば、Unicodeデータベース(AL32UTF8)に、5文字の英語文字とともに最大5文字の中国語文字を格納できるVARCHAR2列が必要であるとします。バイト・セマンティクスを使用すると、この列には、長さ3バイトである中国語文字用に15バイトと、長さ1バイトである英語文字用に5バイト、合計20バイトが必要です。キャラクタ・セマンティクスを使用すると、この列に必要な文字数は10となります。
関連項目:
-
キャラクタ・セットと長さセマンティクスの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。
7.1.8 UnicodeおよびSQL各国語キャラクタ・データ型について
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の列や変数を宣言する場合、指定する長さはバイト数ではなく文字数になります。
関連項目:
-
Unicodeの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。
-
Oracle DatabaseでのUnicode文字の格納の詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。
-
SQL各国語キャラクタ・データ型の詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。
7.2 NLSパラメータの初期値について
SQL Developerを除いて、NLSパラメータの初期値は、データベース初期化パラメータによって設定されます。
DBAは初期化パラメータ・ファイルで初期化パラメータの値を設定でき、その設定は次回データベースが起動されたときに有効になります。
SQL DeveloperでのNLSパラメータの初期値を表7-1に示します。
表7-1 SQL DeveloperでのNLSパラメータの初期値
パラメータ | 初期値 |
---|---|
NLS_CALENDAR |
|
NLS_CHARACTERSET |
|
NLS_COMP |
|
NLS_CURRENCY |
|
NLS_DATE_FORMAT |
|
NLS_DATE_LANGUAGE |
|
NLS_DUAL_CURRENCY |
|
NLS_ISO_CURRENCY |
|
NLS_LANGUAGE |
|
NLS_LENGTH_SEMANTICS |
|
NLS_NCHAR_CHARACTERSET |
|
NLS_NCHAR_CONV_EXCP |
|
NLS_NUMERIC_CHARACTERS |
|
NLS_SORT |
|
NLS_TERRITORY |
|
NLS_TIMESTAMP_FORMAT |
|
NLS_TIMESTAMP_TZ_FORMAT |
|
NLS_TIME_FORMAT |
|
NLS_TIME_TZ_FORMAT |
|
関連項目:
初期化パラメータと初期化パラメータ・ファイルの詳細は、『Oracle Database管理者ガイド』を参照してください。
7.3 NLSパラメータ値の表示
NLSパラメータの現在の値を表示するには、SQL Developerの各国語サポート・パラメータ・レポートを使用します。
各国語サポート・パラメータ・レポートを表示するには、次の手順を実行します。
関連項目:
SQL Developerレポートの詳細は、『Oracle SQL Developerユーザーズ・ガイド』を参照してください。
7.4 NLSパラメータ値の変更
1つ以上のNLSパラメータの値を、次のいずれかの方法で変更できます。
-
現在および今後の、すべてのSQL Developer接続の値を変更します。
-
クライアントで、対応するNLS環境変数の設定を変更します。
クライアントでのみ、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パラメータの値を変更できます。 - 現在のSQLファンクション起動に対するNLSパラメータ値の変更
動作がNLSパラメータ値に依存しているSQLファンクションは、ロケール依存と呼ばれます。ロケール依存のSQLファンクションには、オプションのNLSパラメータがあります。
関連項目:
-
ALTER SESSION文の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。
-
NLSパラメータの設定の詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。
7.4.1 すべてのSQL Developer接続に対するNLSパラメータ値の変更
現在および今後の、すべてのSQL Developer接続に対するNLSパラメータの値を変更できます。
各国語サポート・パラメータ値を変更するには、次の手順を実行します。
注意:
NLSパラメータ値に変更が反映されない場合、「レポートの実行」アイコンをクリックします。
関連項目:
SQL Developerのプリファレンスの詳細は、『Oracle SQL Developerユーザーズ・ガイド』を参照してください。
7.4.2 現在のSQLファンクション起動に対するNLSパラメータ値の変更
動作がNLSパラメータの値に依存するSQLファンクションはロケール依存と呼ばれます。ロケール依存のSQLファンクションには、オプションのNLSパラメータがあります。
オプションの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グローバリゼーション・サポート・ガイド』を参照してください。
7.5 各NLSパラメータについて
多くのNLSパラメータを使用できます。
- ロケールとNLS_LANGパラメータについて
ロケールとは、システムやアプリケーションを実行する言語的および文化的環境のことです。Oracle Database ソフトウェアでロケールを指定する最も簡単な方法は、NLS_LANGパラメータを設定することです。 - NLS_LANGUAGEパラメータについて
このパラメータは、データベースのデフォルト言語を指定します。 - NLS_TERRITORYパラメータについて
このパラメータは、日付形書式、タイム・スタンプ書式、小数点文字およびグループ・セパレータ、各国通貨記号、ISO通貨記号、二重通貨記号に対するデフォルト規則を指定します。 - NLS_DATE_FORMATパラメータについて
このパラメータは、TO_CHARおよびTO_DATEファンクションを使用するためのデフォルトの日付書式を指定します。 - NLS_DATE_LANGUAGEパラメータについて
このパラメータは、SQLファンクションTO_CHARおよびTO_DATEで生成される曜日および月の名前と略称の言語、デフォルトの日付書式(NLS_DATE_FORMATで設定)、およびAM、PM、AD、BCに相当する、デフォルト言語の記号を指定します。 - NLS_TIMESTAMP_FORMATおよびNLS_TIMESTAMP_TZ_FORMATパラメータについて
このパラメータは、TIMESTAMPオーディオテープおよびTIMESTAMP WITH LOCAL TIME ZONEオーディオテープのデフォルトの日付書式を定義します。 - NLS_CALENDARパラメータについて
このパラメータは、データベースの暦法を指定します。 - NLS_NUMERIC_CHARACTERSパラメータについて
このパラメータは、小数点記号(数値の整数部と小数部の区切り)とグループ・セパレータ(千や100万などの桁区切り)を指定します。この文字は数値書式要素Gで戻されます。 - NLS_CURRENCYパラメータについて
このパラメータは、各国の通貨記号(数値書式要素Lが返す文字列)を指定します。 - NLS_ISO_CURRENCYパラメータについて
このパラメータは、各国の通貨記号(数値書式要素Cが返す文字列)を指定します。 - NLS_DUAL_CURRENCYパラメータについて
このパラメータは、二重通貨記号(ユーロ移行期間中にユーロ通貨記号をサポートするために導入)を指定します。 - NLS_SORTパラメータについて
このパラメータは、ORDER BY句を持つ問合せの言語ソート順序(照合順序)を指定します。 - NLS_COMPパラメータについて
このパラメータは、SQL操作の文字比較操作を指定します。 - NLS_LENGTH_SEMANTICSパラメータについて
このパラメータは、文字データ型CHAR、VARCHAR2およびLONGの列の長さセマンティクス、つまりこれらの列がバイト単位または文字単位のどちらで指定されているかを指定します。これらの列がバイトまたは文字のいずれかで指定されるかを指定します(パラメータ設定後に宣言された列にのみ適用可能)。
関連項目:
-
グローバリゼーション・サポート環境の設定の詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。
7.5.1 ロケールとNLS_LANGパラメータについて
ロケールとは、システムやアプリケーションを実行する言語的および文化的環境のことです。Oracle Database ソフトウェアでロケールを指定する最も簡単な方法は、NLS_LANGパラメータを設定することです。
NLS_LANGパラメータにより、サーバー・セッション(SQL文の処理など)とクライアント・アプリケーション(Oracle Databaseツールの表示の書式など)の両方に対するNLS_LANGUAGEとNLS_TERRITORYパラメータのデフォルト値を設定できます。また、NLS_LANGパラメータで、入力または表示されるデータに対してクライアント・アプリケーションが使用するキャラクタ・セットも設定できます。
NLS_LANGのデフォルト値は、データベースのインストール中に設定されます。 ALTER SESSION文を使用して、NLS_LANGで設定されるものも含めて、セッションに対するNLSパラメータの値を変更できます。ただし、クライアント環境のNLS設定を変更できるのは、そのクライアントのみです。
関連項目:
-
NLS_LANG
パラメータを使用したロケールの指定の詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。 -
Oracle Databaseでサポートされている、言語、地域、キャラクタ・セットなどのロケール・データの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。
7.5.2 NLS_LANGUAGEパラメータについて
このパラメータはデータベースのデフォルト言語を指定します。
指定項目: データベースのデフォルト言語。次の項目に対するデフォルト規則を指定します。
-
サーバー・メッセージの言語
-
曜日および月の名前と略称の言語は、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の値に設定します。
関連項目:
-
NLS_LANGUAGEパラメータの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。
7.5.3 NLS_TERRITORYパラメータについて
このパラメータは、日付形書式、タイム・スタンプ書式、小数点文字およびグループ・セパレータ、各国通貨記号、ISO通貨記号、二重通貨記号に対するデフォルト規則を指定します。
指定項目: 次のデフォルト規則。
-
日付書式
-
タイム・スタンプ書式
-
小数点記号および桁グループ・セパレータ
-
各国通貨記号
-
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の値に設定します。
関連項目:
-
NLS_TERRITORYパラメータの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。
7.5.4 NLS_DATE_FORMATパラメータについて
このパラメータは、TO_CHARおよびTO_DATEファンクションで使用するデフォルトの日付書式を指定します。
指定内容: 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
に設定した場合に、デフォルトの日付書式、短い日付書式および長い日付書式にどのように影響するかを示します。
例7-4では、NLS_DATE_FORMATの値を変更し、NLS_TERRITORYによって設定されたデフォルト値を上書きします。
この例を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の上書き
-
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の値に設定します。
関連項目:
-
NLS_DATE_FORMATパラメータの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。
-
TO_CHARファンクションの詳細は、『Oracle Database SQL言語リファレンス』を参照してください。
-
TO_DATEファンクションの詳細は、『Oracle Database SQL言語リファレンス』を参照してください。
7.5.5 NLS_DATE_LANGUAGEパラメータについて
このパラメータは、SQLファンクションTO_CHARおよびTO_DATEで生成される曜日および月の名前と略称の言語、デフォルトの日付書式(NLS_DATE_FORMATで設定)、およびAM、PM、AD、BCに相当する、デフォルト言語の記号を指定します。
指定項目: 次の方法で作成した曜日と月の名前と略号。
-
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の値に設定します。
関連項目:
-
NLS_DATE_LANGUAGEパラメータの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。
-
TO_CHARファンクションの詳細は、『Oracle Database SQL言語リファレンス』を参照してください。
-
ロギング属性の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。
7.5.6 NLS_TIMESTAMP_FORMATおよびNLS_TIMESTAMP_TZ_FORMATパラメータについて
このパラメータは、TIMESTAMPオーディオテープおよびTIMESTAMP WITH LOCAL TIME ZONEオーディオテープのデフォルトの日付書式を指定します。
指定項目: 次のデフォルト日付書式:
-
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パラメータについて」を参照してください。
関連項目:
-
NLS_TIMESTAMP_FORMATパラメータの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。
-
NLS_TIMESTAMP_TZ_FORMATパラメータの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。
-
日時データ型およびタイムゾーン・サポートの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。
-
TIMESTAMPオーディオテープの詳細は、『Oracle Database SQL言語リファレンス』を参照してください。
-
TIMESTAMP WITH LOCAL TIME ZONEデータ型の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。
7.5.7 NLS_CALENDARパラメータについて
このパラメータは、データベースの暦法を指定します。
指定項目: データベースの暦法
許容可能な値: 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の値に設定します。
関連項目:
-
NLS_CALENDAR
パラメータの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。
7.5.8 NLS_NUMERIC_CHARACTERSパラメータについて
このパラメータは、小数点記号(数値の整数部と小数部の区切り)とグループ・セパレータ(千や100万などの桁区切り)を指定します。この文字は数値書式要素Gで戻されます。
指定項目: 小数点記号(数値の整数部と小数部の区切り)とグループ・セパレータ(千や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の値に設定します。
関連項目:
-
NLS_NUMERIC_CHARACTERSパラメータの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。
7.5.9 NLS_CURRENCYパラメータについて
このパラメータは、各国の通貨記号(数値書式要素Lが返す文字列)を指定します。
指定内容: 各国通貨記号(数値書式要素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の値に設定します。
関連項目:
-
NLS_CURRENCYパラメータの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。
7.5.10 NLS_ISO_CURRENCYパラメータについて
このパラメータは、ISO通貨記号(数値書式要素Cが返す文字列)を指定します。
指定内容: 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_ISO_CURRENCYパラメータの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。
7.5.11 NLS_DUAL_CURRENCYパラメータについて
このパラメータは、二重通貨記号(ユーロ移行期間中にユーロ通貨記号をサポートするために導入)を指定します。
指定項目: 2重通貨記号(ユーロ移行期間中にユーロ通貨記号をサポートするために導入)
許容可能な値: 任意の有効な通貨記号文字列。
デフォルト値: NLS_TERRITORYによって設定されます。詳細は、「NLS_TERRITORYパラメータについて」を参照してください。
関連項目:
-
NLS_DUAL_CURRENCYパラメータの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。
7.5.12 NLS_SORTパラメータについて
このパラメータは、ORDER BY句を持つ問合せの言語ソート順序(照合順序)を指定します。
指定内容: 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とは書式が若干異なります。
大/小文字およびアクセントを区別しないソート
Oracle Databaseの操作では、大/小文字および文字のアクセントが区別されます。大/小文字を区別しないソートを実行するには、NLS_SORTパラメータの値に_CI
を付け加えます(BINARY_CI
やGERMAN_CI
など)。大/小文字および文字のアクセントのどちらも区別しないソートを実行するには、NLS_SORT
パラメータの値に_AIを付け加えます(BINARY_AI
やFRENCH_M_AI
など)。
例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の値に設定します。
関連項目:
-
NLS_SORT
パラメータの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。 -
大/小文字およびアクセントを区別しないソートの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。
7.5.13 NLS_COMPパラメータについて
このパラメータは、SQL操作の文字比較動作を指定します。
指定項目: SQL操作の文字比較動作。
許容可能な値:
-
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の値に設定します。
関連項目:
-
NLS_COMPパラメータの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。
7.5.14 NLS_LENGTH_SEMANTICSパラメータについて
このパラメータは、文字データ型CHAR、VARCHAR2およびLONGの列の長さセマンティクス、つまりこれらの列がバイト単位または文字単位のどちらで指定されているかを指定します。これらの列がバイトまたは文字のいずれかで指定されるかを指定します(パラメータ設定後に宣言された列にのみ適用可能)。
指定広告: 文字データ型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の値に設定します。
関連項目:
-
NLS_LENGTH_SEMANTICSパラメータの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』 を参照してください。
7.6 グローバルなアプリケーションでのUnicodeの使用方法
Unicodeデータは挿入および取得できます。データはデータベースおよびクライアント間で透過的に変換され、クライアント・プログラムがデータベース・キャラクタ・セットおよび各国キャラクタ・セットから独立していることを保証します。
- SQLおよびPL/SQLにおけるUnicode文字列リテラルの表現
SQLとPL/SQLでUnicode文字列リテラルを表現する方法は3つあります。 - キャラクタ・セット変換中のデータ消失の回避
SQLまたはPL/SQL文の一部として、リテラル(接頭辞Nあり、またはなし)が、文の残りとして、同じキャラクタ・セットでエンコードされます。クライアント側では、文はNLS_LANGパラメータで決定されるクライアントのキャラクタ・セットでエンコードされます。サーバー側では、文はデータベースのキャラクタ・セットでエンコードされます。
関連項目:
-
Unicodeを使用したSQLおよびPL/SQLのプログラミングの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。
-
Unicodeを使用したプログラミングの一般的な情報は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。
7.6.1 SQLおよびPL/SQLにおけるUnicode文字列リテラルの表現
SQLとPL/SQLでUnicode文字列リテラルを表現する方法は3つあります。
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エンコーディング値は、各国語キャラクタ・セットに直接変換されます。
関連項目:
-
Unicode文字列リテラルの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。
-
NCHRファンクションの詳細は、『Oracle Database SQL言語リファレンス』を参照してください。
-
UNISTRファンクションの詳細は、『Oracle Database SQL言語リファレンス』を参照してください。
7.6.2 キャラクタ・セット変換中のデータ消失の回避
SQLまたはPL/SQL文の一部として、リテラル(接頭辞Nあり、またはなし)が、文の残りとして、同じキャラクタ・セットでエンコードされます。クライアント側では、文はNLS_LANGパラメータで決定されるクライアントのキャラクタ・セットでエンコードされます。サーバー側では、文はデータベースのキャラクタ・セットでエンコードされます。
SQLまたはPL/SQL文がクライアントからデータベースに送信されると、それに応じてキャラクタ・セットが変換されます。クライアントがテキスト・リテラルで使用しているすべての文字がデータベース・キャラクタ・セットに含まれていない場合、データはこの変換で消失します。NCHAR文字列リテラルはデータベース・キャラクタ・セットに依存しないよう設計されているため、CHARテキスト・リテラルよりも影響を受けやすくなります。
互換性のないデータベース・キャラクタ・セットへの変換時のデータ消失を回避するために、NCHARリテラル置換機能を有効にすることができます。詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。