NLS_NCHAR_CONV_EXCPは、暗黙的または明示的なキャラクタ・タイプの変換時にデータ が損失した場合に、エラーをレポートするかどうかを決定します。
パラメータ・タイプ パラメータ・タイプパラメータ・タイプ
パラメータ・タイプ: 文字列 パラメータの有効範囲
パラメータの有効範囲パラメータの有効範囲
パラメータの有効範囲: 環境変数 デフォルト値
デフォルト値デフォルト値
デフォルト値: NLS_TERRITORYから導出 値の範囲
値の範囲値の範囲
値の範囲: 有効な任意の文字
パラメータ・タイプ パラメータ・タイプパラメータ・タイプ
パラメータ・タイプ: 文字列 パラメータの有効範囲
パラメータの有効範囲パラメータの有効範囲
パラメータの有効範囲: 環境変数、ALTERSYSTEM、ALTERSESSION デフォルト値
デフォルト値デフォルト値
デフォルト値: FALSE 値の範囲値の範囲値の範囲
値の範囲: TRUE、FALSE
キャラクタ・セット・パラメータ
4
言語ソート 言語ソート 言語ソート 言語ソート
この章では、Oracle環境での文字のソート方法について説明します。この章の内容は、次の とおりです。
■ Oracleのソート機能の概要
■ バイナリ・ソートの使用
■ 言語ソートの使用
■ 言語索引の使用
Oracleのソート機能の概要
Oracle のソート機能の概要 のソート機能の概要 のソート機能の概要 のソート機能の概要
ソート順序は言語によって異なります。さらに、同じアルファベットを使用している文化ま たは国の間でも、ワードのソート方法が異なる場合があります。たとえば、デンマーク語の 文字Æは、Zの後にきます。また、YとÜは同じ文字の変形とみなされます。ソート順序に は、大/小文字区別の有無およびアクセント記号無視の可否を指定できます。また、表音的 なソート順序も指定でき、東南アジアの表意文字の場合は、画数や部首などの文字の外観に 基づいたソート順序も指定できます。ソート上の一般的な問題となるものに、結合文字があ ります。たとえば、伝統的なスペイン語のchは、1つの独立した文字です。つまり、正しい ソート順序は、cerveza、colorado、cheremoyaのようになります。したがって、文字cは、
次にくる文字がhであるかどうかが確認されるまで、ソートされません。
Oracleには、複数の異なる種類のソート機能があり、言語に応じた正確なソートに加えて新
しい多言語ISO規格(14651)に準拠したソートが実現できます。この規格は、複数言語を 同時に処理するように設計されています。
バイナリ・ソートの使用 バイナリ・ソートの使用 バイナリ・ソートの使用 バイナリ・ソートの使用
従来から、文字データが格納される場合のソート基準は、文字コード体系によって定義され た文字の数値に基づいています。このようなソートをバイナリ・ソートバイナリ・ソートバイナリ・ソートバイナリ・ソートと呼びます。 ASCII
やEBCDICの規格では、文字A~Zを昇順の数値で定義しているため、英語のアルファ
ベットについては正しいソート結果が得られます。ただし、ASCII規格では、大文字はすべ て小文字の前にきます。逆に、EBCDIC規格では、小文字はすべて大文字の前にきます。
他の言語で使用されている文字が存在すると、通常、バイナリ・ソートでは正しい結果が得 られません。たとえば、文字コード体系でÄの数値がBの数値より高い場合、昇順のORDER BY問合せでは、ABC、ABZ、BCD、ÄBCの順で文字列が戻ります。漢字を使用する言語の場 合、通常バイナリ・ソートは、言語的な意味はありません。
言語ソートの使用 言語ソートの使用 言語ソートの使用 言語ソートの使用
文字のアルファベット順に一致するソート基準を得るには、文字コード体系内の数値に依存 せずに文字をソートする別のソート方法を使用する必要があります。この方法を言語ソート言語ソート言語ソート言語ソート と呼びます。言語ソートでは、各文字を、言語的に適切な文字順序を反映した数値に置換す ることによって、ソート操作を行います。
Oracleには、次の2種類の言語ソートが用意されています。
■ 通常、ヨーロッパ諸国の言語に使用する単一言語ソート
■ 通常、アジア諸国の言語に使用する多言語ソート
言語ソートの使用
単一言語ソート 単一言語ソート 単一言語ソート 単一言語ソート
Oracleでは、単一言語ソートで文字列を比較する場合、2つのパスを作成します。最初のパ
スで、メジャー・テーブルにある全文字列のメジャー値を比較し、次のパスで、マイナー・
テーブルのマイナー値を比較します。各メジャー・テーブルのエントリには、Unicodeコー ド・ポイントとメジャー値が格納されています。通常、同じ外観の文字には、同じメジャー 値があります。 Oracleでは、マイナー値が異なる同じメジャー値を使用して、発音区別記号 を持つ文字と大/小文字の区別を定義します。表4-1に、a、A、äおよびÄのソートに使用す るサンプルの値を示します。
多言語ソート 多言語ソート 多言語ソート 多言語ソート
Oracle9i には多言語ソートが用意されているため、複数の言語を1つのソートの一部として
ソートできます。この機能は、複雑なソート・ルールやグローバルな多言語データベースを 持つ特定地域または言語に有効です。さらに、Oracle9i では、従来のリリースで定義された すべてのソート順序をそのままサポートしています。
アジア諸国の言語データや多言語データに対しては、ISO規格(ISO14651)とUnicode 3.0 規格に基づいたソート・メカニズムが用意されています。多言語ソートは、画数、ピンイン
(中国語の発音記号)または部首で順序付けされるアジア諸国の言語のソートにも有効です。
その上、標準的な同値化やサロゲート・ペアも処理できます。 1つのソートに最大110万の コード・ポイントを定義できます。
たとえば、Oracle9i ではFrenchソートがサポートされていますが、ソート順序をFrench からFrench_Mに変更することで、フランス語に新しい多言語ソートを適用できます。この _Mは、多言語ソートに対する新しいISO規格(ISO 14651)を表します。この変更によって、
ソート順序がGENERIC_Mソート順序(ISO規格)となり、2次レベルで右から左へのソー トが可能になります。したがって、表に多言語データが格納されている場合は、多言語ソー トの使用をお薦めします。メモリー使用量への考慮から、純粋のフランス語のみを表に含め る場合は、French単一言語ソートを使用するほうが、パフォーマンスは向上します。管理 者は、拡張性とパフォーマンスのどちらを優先するかを決定する必要があります。
表表表
表4-1 文字のサンプルとそのコード・ポイントのメジャー値とマイナー値文字のサンプルとそのコード・ポイントのメジャー値とマイナー値文字のサンプルとそのコード・ポイントのメジャー値とマイナー値文字のサンプルとそのコード・ポイントのメジャー値とマイナー値 文字文字文字
文字 メジャー値メジャー値メジャー値メジャー値 マイナー値マイナー値マイナー値マイナー値
a 15 5
A 15 10
ä 15 15
Ä 15 20
言語ソートの使用
多言語ソートを使用する場合は、環境変数NLS_SORTを設定するか、NLSSORT関数を使用 して、デフォルトのソート順序を指定できます。
% setenv NLS_SORT='French_M' または
NLSSORT('','NLS_SORT=French_M')
単一言語ソートの場合と同じように、多言語ソートに基づいて新しい言語索引を作成できま す。ただし、SQL文で使用されているすべての索引を変更する必要がない場合は、新規の多 言語ソートのみ指定できます。手順は、次のとおりです。
DROP INDEX index_table1;
CREATE INDEX index_table1 ON table1(col, 'NLS_SORT=French_M');
COMMIT;
多言語ソート・レベル 多言語ソート・レベル 多言語ソート・レベル 多言語ソート・レベル
Oracleでは、多言語ソートを次の3つの精度レベルで評価します。
■ 1次レベル・ソート
■ 2次レベル・ソート
■ 3次レベル・ソート
1次レベル・ソート次レベル・ソート次レベル・ソート次レベル・ソート 1次レベル・ソートでは、文字aと文字bの相違など、ベース文字ベース文字ベース文字ベース文字間の 相違を識別します。aがbの前にくるか、bがaの前にくるか、あるいは同値かの定義は、
個々のロケールに準じます。文字をバイナリで表現することは、意味のないことです。無視 可能文字には、0(ゼロ)の1次レベルの重み(順序)を割り当てます。その結果、その文 字は1次レベルで無視されます。他のすべてのレベルにある無視可能文字も重み0(ゼロ)
を使用して定義します。次のワードは、1次レベルでは、大/小文字区別が識別されないた め、様々な順序で表示されます。
Bat bat BAT BET Bet bet
言語ソートの使用
2次レベル・ソート次レベル・ソート次レベル・ソート次レベル・ソート 2次レベル・ソートでは、ベース文字(1次レベル・ソート)を識別し、
さらに特定のベース文字に付いている様々な発音区別記号を識別します。たとえば、文字Ä と文字Aの相違は、発音区別記号の有無のみです。したがって、ÄとAは2次レベルでは異 なる文字ですが、1次レベルでは同じ文字です。これは、両方とも同じベース文字 Aから導 出されているためです。
SELECT words FROM rdictionary; --with a secondary level sort words
---resume résumé Résumé Resumes resumes résumés
3次レベル・ソート次レベル・ソート次レベル・ソート次レベル・ソート 3次レベル・ソートでは、ベース文字(1次レベル・ソート)、発音区別 記号(2次レベル・ソート)および文字の大/小文字の相違が識別されます。 さらに、+、-および*などの特殊な文字の相違も識別できます。たとえば、文字aとAは3次レベルでは 異なる文字ですが、1次レベルと2次レベルでは同じ文字です。これは、相違点が大文字と 小文字の違いのみであるためです。別の例では、文字äとAは1次レベルでは同じ文字です が、2次レベルおよび3次レベルでは異なる文字です。最後の例では、ダッシュ文字-の1 次レベルでの順序は、0(ゼロ)です。つまり、この文字は、1次と2次のレベルでは無視さ れます。ダッシュを0(ゼロ)以外の1次レベル順序を持つ別の文字、たとえば、文字uと 比較しても、1次レベルでの結果は取得できません。これは、uと比較する対象の文字がな いためです。この場合は、3次レベルでのみ-とuの相違が検索されます。次に例を示しま す。
SELECT words FROM rdictionary; --with a tertiary level sort words
---resume Resume résumé Résumé resumes résumés Resumes Résumés