Comments
Description
Transcript
日本語 - OTN
Oracle® Database グローバリゼーション・サポート・ガイド 10g リリース 1(10.1) 部品番号 : B12470-02 2004 年 7 月 Oracle Database グローバリゼーション・サポート・ガイド , 10g リリース 1(10.1) 部品番号 : B12470-02 原本名 : Oracle Database Globalization Support Guide, 10g Release 1 (10.1) 原本部品番号 : B10749-02 原本著者 : Paul Lane 原本協力者 : Cathy Baird, Dan Chiba, Winson Chu, Claire Ho, Gary Hua, Simon Law, Geoff Lee, Peter Linsley, Qianrong Ma, Keni Matsuda, Meghna Mehta, Valarie Moore, Shige Takeda, Linus Tanaka, Makoto Tozawa, Barry Trute, Ying Wu, Peter Wallack, Chao Wang, Huaqing Wang, Simon Wong, Michael Yau, Jianping Yang, Qin Yu, Tim Yu, Weiran Zhang, Yan Zhu Copyright © 1996, 2004 Oracle Corporation. All rights reserved. 制限付権利の説明 このプログラム(ソフトウェアおよびドキュメントを含む)には、オラクル社およびその関連会社に所 有権のある情報が含まれています。このプログラムの使用または開示は、オラクル社およびその関連会 社との契約に記された制約条件に従うものとします。著作権、特許権およびその他の知的財産権と工業 所有権に関する法律により保護されています。 独立して作成された他のソフトウェアとの互換性を得るために必要な場合、もしくは法律によって規定 される場合を除き、このプログラムのリバース・エンジニアリング、逆アセンブル、逆コンパイル等は 禁止されています。 このドキュメントの情報は、予告なしに変更される場合があります。オラクル社およびその関連会社は、 このドキュメントに誤りが無いことの保証は致し兼ねます。これらのプログラムのライセンス契約で許 諾されている場合を除き、プログラムを形式、手段(電子的または機械的) 、目的に関係なく、複製また は転用することはできません。 このプログラムが米国政府機関、もしくは米国政府機関に代わってこのプログラムをライセンスまたは 使用する者に提供される場合は、次の注意が適用されます。 U.S. GOVERNMENT RIGHTS Programs, software, databases, and related documentation and technical data delivered to U.S. Government customers are "commercial computer software" or "commercial technical data" pursuant to the applicable Federal Acquisition Regulation, and agency-specific supplemental regulations. As such, use, duplication, disclosure, modification, and adaptation of the Programs, including documentation and technical data, shall be subject to the licensing restrictions set forth in the applicable Oracle license agreement, and, to the extent applicable, the additional rights set forth in FAR 52.227-19, Commercial Computer Software--Restricted Rights (June 1987). Oracle Corporation, 500 Oracle Parkway, Redwood City, CA 94065. このプログラムは、核、航空産業、大量輸送、医療あるいはその他の危険が伴うアプリケーションへの 用途を目的としておりません。このプログラムをかかる目的で使用する際、上述のアプリケーションを 安全に使用するために、適切な安全装置、バックアップ、冗長性(redundancy) 、その他の対策を講じ ることは使用者の責任となります。万一かかるプログラムの使用に起因して損害が発生いたしましても、 オラクル社およびその関連会社は一切責任を負いかねます。 Oracle は Oracle Corporation およびその関連会社の登録商標です。その他の名称は、Oracle Corporation または各社が所有する商標または登録商標です。 目次 はじめに ......................................................................................................................................................................... xiii 対象読者 ................................................................................................................................................................... このマニュアルの構成 ........................................................................................................................................... 関連ドキュメント ................................................................................................................................................... 表記規則 ................................................................................................................................................................... xiv xiv xvi xvi グローバリゼーション・サポートの新機能 ......................................................................................... xxi Unicode 3.2 のサポート ........................................................................................................................................ アクセント区別なしおよび大 / 小文字区別の言語ソートと問合せ ............................................................. Character Set Scanner ユーティリティの拡張 .................................................................................................. Globalization Development Kit ......................................................................................................................... 正規表現 ................................................................................................................................................................. Unicode キャラクタ・セットのコード・チャートの表示 ............................................................................. ロケールのバリアント ......................................................................................................................................... 転送可能な NLB データ ....................................................................................................................................... NLS_LENGTH_SEMANTICS ............................................................................................................................ CLOB データ型と NCLOB データ型の間の暗黙的な変換 ............................................................................. Oracle の言語および地域定義ファイルの更新 ................................................................................................ 1 xxii xxii xxii xxiii xxiii xxiii xxiii xxiv xxiv xxiv xxiv グローバリゼーション・サポートの概要 グローバリゼーション・サポートのアーキテクチャ ....................................................................................... オンデマンドのロケール・データ ............................................................................................................... 多言語アプリケーションをサポートするアーキテクチャ ....................................................................... 多言語データベースでの Unicode の使用 .................................................................................................. 1-2 1-2 1-4 1-5 i グローバリゼーション・サポートの機能 ........................................................................................................... 言語サポート ................................................................................................................................................... 地域サポート ................................................................................................................................................... 日付と時刻の書式 ........................................................................................................................................... 通貨と数値の書式 ........................................................................................................................................... カレンダ機能 ................................................................................................................................................... 言語ソート ....................................................................................................................................................... キャラクタ・セット・サポート ................................................................................................................... キャラクタ・セマンティクス ....................................................................................................................... ロケール・データとカレンダ・データのカスタマイズ ........................................................................... Unicode のサポート ....................................................................................................................................... 2 キャラクタ・セットの選択 キャラクタ・セット・エンコーディング ........................................................................................................... エンコードされたキャラクタ・セットについて ....................................................................................... エンコードされる文字 ................................................................................................................................... キャラクタ・セットでサポートされている文字 ....................................................................................... 文字のエンコード方法 ................................................................................................................................... Oracle のキャラクタ・セットのネーミング規則 .................................................................................... 長さセマンティクス ............................................................................................................................................. Oracle データベース・キャラクタ・セットの選択 ........................................................................................ 現在および将来の言語要件 ......................................................................................................................... クライアントのオペレーティング・システムとアプリケーションの互換性 ..................................... クライアントとサーバーの間のキャラクタ・セット変換 ..................................................................... データベース・キャラクタ・セットの選択がパフォーマンスに与える影響 ..................................... データベース・キャラクタ・セットに関する制限事項 ......................................................................... 各国語キャラクタ・セットの選択 ............................................................................................................. サポート対象のデータ型の概要 ................................................................................................................. データベース作成後のキャラクタ・セットの変更 ......................................................................................... 単一言語データベースの使用例 ......................................................................................................................... 単一言語の使用例でのキャラクタ・セット変換 ..................................................................................... 多言語データベースの使用例 ............................................................................................................................. 制限付き多言語サポート ............................................................................................................................. 無制限多言語サポート ................................................................................................................................. ii 1-6 1-6 1-7 1-7 1-7 1-8 1-8 1-8 1-8 1-9 1-9 2-2 2-2 2-4 2-5 2-8 2-10 2-11 2-14 2-15 2-16 2-16 2-17 2-17 2-18 2-18 2-20 2-20 2-21 2-23 2-23 2-24 3 グローバリゼーション・サポート環境の設定 NLS パラメータの設定 .......................................................................................................................................... 環境変数 NLS_LANG を使用したロケールの選択 .......................................................................................... NLS_LANG の値の指定 ................................................................................................................................ 言語指定と地域指定のオーバーライド ....................................................................................................... ロケールのバリアント ................................................................................................................................... NLS_LANG 設定とデータベース・キャラクタ・セットを一致させる必要があるかどうか .......... NLS データベース・パラメータ ....................................................................................................................... NLS データ・ディクショナリ・ビュー .................................................................................................... NLS 動的パフォーマンス・ビュー ............................................................................................................ OCINlsGetInfo() 関数 .................................................................................................................................. 言語および地域のパラメータ ............................................................................................................................. NLS_LANGUAGE ....................................................................................................................................... NLS_TERRITORY ........................................................................................................................................ 日付および時間を指定するパラメータ ............................................................................................................. 日付書式 ......................................................................................................................................................... 時刻書式 ......................................................................................................................................................... カレンダ定義 ......................................................................................................................................................... カレンダ書式 ................................................................................................................................................. NLS_CALENDAR ........................................................................................................................................ 数値パラメータとリスト・パラメータ ............................................................................................................. 数値書式 ......................................................................................................................................................... NLS_NUMERIC_CHARACTERS .............................................................................................................. NLS_LIST_SEPARATOR ............................................................................................................................ 通貨パラメータ ..................................................................................................................................................... 通貨書式 ......................................................................................................................................................... NLS_CURRENCY ........................................................................................................................................ NLS_ISO_CURRENCY ................................................................................................................................ NLS_DUAL_CURRENCY ........................................................................................................................... Oracle のユーロ・サポート ........................................................................................................................ NLS_MONETARY_CHARACTERS .......................................................................................................... NLS_CREDIT ................................................................................................................................................ NLS_DEBIT ................................................................................................................................................... 言語ソート・パラメータ ..................................................................................................................................... NLS_SORT ..................................................................................................................................................... NLS_COMP ................................................................................................................................................... キャラクタ・セット変換パラメータ ................................................................................................................. NLS_NCHAR_CONV_EXCP ..................................................................................................................... 3-2 3-5 3-7 3-8 3-9 3-11 3-11 3-12 3-12 3-12 3-13 3-13 3-16 3-20 3-20 3-24 3-26 3-27 3-29 3-31 3-31 3-32 3-33 3-34 3-34 3-35 3-36 3-38 3-40 3-41 3-41 3-42 3-42 3-42 3-44 3-45 3-45 iii 長さセマンティクス ............................................................................................................................................. 3-46 NLS_LENGTH_SEMANTICS .................................................................................................................... 3-46 4 日時データ型とタイム・ゾーン・サポート 日時データ型、期間データ型およびタイム・ゾーン・サポートの概要 ....................................................... 日時データ型と期間データ型 ............................................................................................................................... 日時データ型 ................................................................................................................................................... 期間データ型 ................................................................................................................................................. 日時および時間隔の演算と比較 ......................................................................................................................... 日時および時間隔の演算 ............................................................................................................................. 日時の比較 ..................................................................................................................................................... 日時データ型の明示的な変換 ..................................................................................................................... 日時 SQL 関数 ....................................................................................................................................................... 日時およびタイム・ゾーン・パラメータと環境変数 ..................................................................................... 日時書式パラメータ ..................................................................................................................................... タイム・ゾーン環境変数 ............................................................................................................................. 夏時間セッション・パラメータ ................................................................................................................. タイム・ゾーン・ファイルの選択 ..................................................................................................................... タイム・ゾーン・ファイルのアップグレード ................................................................................................. データベースのタイム・ゾーンの設定 ............................................................................................................. セッションのタイム・ゾーンの設定 ................................................................................................................. AT TIME ZONE 句を使用したタイム・ゾーンの変換 ................................................................................. 夏時間のサポート ................................................................................................................................................. 例 : 日時計算への夏時間の影響 .................................................................................................................. 5 言語ソートと文字列検索 Oracle のソート機能の概要 .................................................................................................................................. バイナリ・ソートの使用 ....................................................................................................................................... 言語ソートの使用 ................................................................................................................................................... 単一言語ソート ............................................................................................................................................... 多言語ソート ................................................................................................................................................... 多言語ソート・レベル ................................................................................................................................... 言語ソート機能 ....................................................................................................................................................... ベース文字 ....................................................................................................................................................... 無視可能文字 ................................................................................................................................................... 短縮文字 ........................................................................................................................................................... 拡張文字 ........................................................................................................................................................... iv 4-2 4-2 4-3 4-12 4-14 4-14 4-15 4-15 4-15 4-18 4-18 4-19 4-19 4-19 4-22 4-24 4-25 4-26 4-27 4-28 5-2 5-3 5-3 5-4 5-5 5-6 5-8 5-8 5-9 5-9 5-9 状況依存文字 ................................................................................................................................................. 標準的な同値化 ............................................................................................................................................. 逆 2 次ソート ................................................................................................................................................. タイ語 / ラオ語文字に対する文字の再配列 ............................................................................................ 特殊文字 ......................................................................................................................................................... 特殊組合せ文字 ............................................................................................................................................. 特殊な大文字 ................................................................................................................................................. 特殊な小文字 ................................................................................................................................................. 大 / 小文字区別およびアクセント区別なしの言語ソート ............................................................................. 大 / 小文字およびアクセントを区別しないソートの例 ........................................................................ 大 / 小文字またはアクセントを区別しないソートの指定 .................................................................... 言語ソートの例 ............................................................................................................................................. 言語索引の使用 ..................................................................................................................................................... 複数言語の言語索引 ..................................................................................................................................... 言語索引の使用要件 ..................................................................................................................................... 言語の文字列検索 ................................................................................................................................................. 多言語環境での SQL 正規表現 ........................................................................................................................... 正規表現での文字範囲 [x-y] ....................................................................................................................... 正規表現での照合要素デリミタ [. .] .......................................................................................................... 範囲式での文字クラス [: :] .......................................................................................................................... 範囲式での同値化クラス [= =] ................................................................................................................... 例 : 正規表現 .................................................................................................................................................. 6 5-10 5-10 5-11 5-11 5-12 5-12 5-12 5-12 5-13 5-16 5-17 5-19 5-20 5-21 5-22 5-23 5-24 5-25 5-25 5-25 5-26 5-26 Unicode を使用した多言語データベースのサポート Unicode の概要 ...................................................................................................................................................... Unicode の概要 ...................................................................................................................................................... 補助文字 ........................................................................................................................................................... Unicode エンコーディング ........................................................................................................................... Oracle による Unicode のサポート ............................................................................................................. Unicode ソリューションのデータベースへの実装 .......................................................................................... Unicode データベースを使用した多言語サポートの有効化 ................................................................... Unicode データ型を使用した多言語サポートの有効化 ........................................................................... Unicode データベースと Unicode データ型のソリューションの選択方法 ........................................ データベースおよびデータ型ソリューションに関する Unicode キャラクタ・セットの比較 ........ Unicode の事例 .................................................................................................................................................... 複数言語サポートのためのデータベース・スキーマ設計 ............................................................................. 多言語データに使用する列の長さの指定 ................................................................................................. 複数言語のデータの格納 ............................................................................................................................. 6-2 6-2 6-3 6-3 6-6 6-7 6-7 6-9 6-10 6-13 6-15 6-18 6-18 6-19 v LOB データ型への複数言語によるドキュメントの格納 ........................................................................ 6-21 多言語ドキュメントの内容検索に使用する索引の作成 ......................................................................... 6-22 7 Unicode を使用したプログラミング Unicode を使用したプログラミングの概要 ...................................................................................................... データベース・アクセス製品のスタックおよび Unicode ....................................................................... Unicode を使用した SQL と PL/SQL のプログラミング ................................................................................ SQL NCHAR データ型 .................................................................................................................................. NCHAR データ型と他のデータ型の間の暗黙的な変換 .......................................................................... データ型変換中のデータ消失に対する例外処理 ....................................................................................... 暗黙的なデータ型変換の規則 ....................................................................................................................... Unicode データ型の SQL 関数 ..................................................................................................................... その他の SQL 関数 ....................................................................................................................................... Unicode 文字列リテラル ............................................................................................................................. NCHAR データを使用した UTL_FILE パッケージの使用 .................................................................... Unicode を使用した OCI プログラミング ....................................................................................................... Unicode プログラミング用の OCIEnvNlsCreate() 関数 ........................................................................ OCI Unicode のコード変換 ........................................................................................................................ OCI での NLS_LANG キャラクタ・セットが UTF8 または AL32UTF8 の場合 ............................... OCI での SQL CHAR データ型のバインドと定義 .................................................................................. OCI での SQL NCHAR データ型のバインドと定義 .............................................................................. OCI での CLOB Unicode データおよび NCLOB Unicode データのバインドと定義 ....................... Unicode を使用した Pro*C/C++ プログラミング ........................................................................................... Unicode での Pro*C/C++ データ変換 ...................................................................................................... Pro*C/C++ での VARCHAR データ型の使用 ........................................................................................ Pro*C/C++ での NVARCHAR データ型の使用 ..................................................................................... Pro*C/C++ での UVARCHAR データ型の使用 ..................................................................................... Unicode を使用した JDBC プログラミング .................................................................................................... SQL CHAR データ型への Java 文字列のバインドと定義 ..................................................................... SQL NCHAR データ型への Java 文字列のバインドと定義 .................................................................. コード変更なしの SQL NCHAR データ型の使用方法 ........................................................................... JDBC ドライバのデータ変換 ...................................................................................................................... Oracle オブジェクト型の oracle.sql.CHAR の使用 ................................................................................ JDBC を使用した場合の SQL CHAR データへのアクセスの制限 ....................................................... Unicode を使用した ODBC と OLE DB のプログラミング ......................................................................... ODBC と OLE DB の Unicode 対応ドライバ ........................................................................................... Unicode での OCI 依存性 ............................................................................................................................ Unicode での ODBC と OLE DB のコード変換 ....................................................................................... vi 7-2 7-2 7-5 7-5 7-7 7-7 7-8 7-9 7-11 7-12 7-13 7-14 7-14 7-16 7-19 7-19 7-21 7-22 7-23 7-24 7-25 7-25 7-26 7-27 7-28 7-29 7-30 7-31 7-33 7-36 7-39 7-39 7-39 7-39 ODBC の Unicode データ型 ....................................................................................................................... OLE DB の Unicode データ型 .................................................................................................................... ADO アクセス .............................................................................................................................................. Unicode を使用した XML プログラミング ..................................................................................................... Java を使用した Unicode での XML ファイルの作成 ............................................................................ Java を使用した Unicode での XML ファイルの読取り ........................................................................ Java を使用した Unicode での XML ストリームの解析 ........................................................................ 8 7-42 7-43 7-43 7-44 7-44 7-45 7-46 Oracle Globalization Development Kit Oracle Globalization Development Kit の概要 ............................................................................................... グローバルなインターネット・アプリケーションの設計 ............................................................................... 単一言語インターネット・アプリケーションの配置 ............................................................................... 多言語インターネット・アプリケーションの配置 ................................................................................... グローバルなインターネット・アプリケーションの開発 ............................................................................... ロケールの判別 ............................................................................................................................................... ロケール対応 ................................................................................................................................................... コンテンツのローカライズ ......................................................................................................................... Globalization Development Kit スタート・ガイド ...................................................................................... J2EE 用 GDK アプリケーション・フレームワーク ....................................................................................... J2EE アプリケーションで GDK フレームワークを使用可能にする方法 ............................................ GDK フレームワークへのロケール・ソースの統合 ............................................................................... GDK フレームワークからのユーザー・ロケールの取得 ....................................................................... GDK Localizer を使用したロケール対応機能の実装 ............................................................................. GDK でサポートされているアプリケーション・ロケールの定義 ....................................................... GDK フレームワークでの ASCII 以外の入出力の処理 .......................................................................... GDK でのローカライズされたコンテンツの管理 ................................................................................... GDK の Java API ................................................................................................................................................. GDK での Oracle ロケール情報 ................................................................................................................. GDK での Oracle ロケール・マッピング ................................................................................................. GDK での Oracle キャラクタ・セット変換(JDK 1.4 以上)................................................................. GDK での Oracle の日付書式、数値書式および通貨書式 ..................................................................... GDK での Oracle のバイナリ・ソートと言語ソート ............................................................................. GDK での Oracle 言語およびキャラクタ・セット検出 ......................................................................... GDK での Oracle の翻訳済ロケール名とタイム・ゾーン名 ................................................................. 電子メール・プログラムへの GDK の使用 .............................................................................................. GDK アプリケーション構成ファイル .............................................................................................................. locale-charset-map ....................................................................................................................................... page-charset .................................................................................................................................................. 8-2 8-3 8-4 8-6 8-8 8-8 8-9 8-10 8-10 8-12 8-15 8-16 8-17 8-19 8-20 8-21 8-24 8-26 8-27 8-27 8-28 8-30 8-31 8-32 8-34 8-34 8-36 8-37 8-38 vii application-locales ........................................................................................................................................ locale-determine-rule ................................................................................................................................... locale-parameter-name ................................................................................................................................ message-bundles .......................................................................................................................................... url-rewrite-rule ............................................................................................................................................. 例 : GDK アプリケーション構成ファイル ................................................................................................ Java 用 GDK 提供のパッケージおよびクラス ................................................................................................ oracle.i18n.lcsd .............................................................................................................................................. oracle.i18n.net ............................................................................................................................................... oracle.i18n.servlet ......................................................................................................................................... oracle.i18n.text .............................................................................................................................................. oracle.i18n.util ............................................................................................................................................... PL/SQL 用 GDK 提供のパッケージ .................................................................................................................. GDK エラー・メッセージ .................................................................................................................................. 9 グローバル環境での SQL と PL/SQL のプログラミング オプションの NLS パラメータを伴うロケール依存の SQL 関数 .................................................................. SQL 関数の NLS パラメータのデフォルト値 ............................................................................................ SQL 関数の NLS パラメータの指定 ............................................................................................................ SQL 関数で受け入れられない NLS パラメータ ........................................................................................ ロケール依存のその他の SQL 関数 ..................................................................................................................... CONVERT 関数 .............................................................................................................................................. 様々な長さセマンティクスに使用する SQL 関数 ..................................................................................... 様々な長さセマンティクスに使用する LIKE 条件 .................................................................................... キャラクタ・セットの SQL 関数 ................................................................................................................. NLSSORT 関数 .............................................................................................................................................. グローバル環境での SQL と PL/SQL のプログラミングに関するその他のトピック .............................. SQL の日付書式マスク ................................................................................................................................ 週番号の計算 ................................................................................................................................................. SQL の数値書式マスク ................................................................................................................................ LOB 列への外部 BFILE データのロード ................................................................................................... 10 9-2 9-3 9-3 9-5 9-6 9-6 9-7 9-8 9-9 9-10 9-13 9-13 9-13 9-14 9-14 グローバル環境での OCI プログラミング OCI NLS 関数の使用 ........................................................................................................................................... OCI でのキャラクタ・セットの指定 ................................................................................................................ OCI でのロケール情報の取得 ............................................................................................................................ Oracle と他の規格とのロケール情報のマッピング ........................................................................................ viii 8-38 8-39 8-40 8-41 8-42 8-43 8-44 8-45 8-45 8-45 8-46 8-46 8-47 8-47 10-2 10-2 10-3 10-4 OCI での文字列操作 ............................................................................................................................................ OCI での文字の分類 ............................................................................................................................................ OCI でのキャラクタ・セットの変換 ................................................................................................................ OCI メッセージ関数 ............................................................................................................................................ lmsgen ユーティリティ ...................................................................................................................................... 11 10-4 10-7 10-8 10-9 10-9 キャラクタ・セットの移行 キャラクタ・セットの移行の概要 ..................................................................................................................... 11-2 データの切捨て ............................................................................................................................................. 11-2 キャラクタ・セット変換の問題 ................................................................................................................. 11-4 既存のデータベースのデータベース・キャラクタ・セットの変更 ............................................................. 11-8 全体エクスポートおよび全体インポートを使用した文字データの移行 ............................................. 11-8 CSALTER スクリプトを使用したキャラクタ・セットの移行 .............................................................. 11-9 CSALTER スクリプトと選択式のインポートを使用した文字データの移行 .................................... 11-10 NCHAR データ型への移行 .............................................................................................................................. 11-11 バージョン 8 から Oracle9i 以上への NCHAR 列の移行 ..................................................................... 11-11 各国語キャラクタ・セットの変更 ........................................................................................................... 11-12 CHAR 列から NCHAR 列への移行 ......................................................................................................... 11-12 キャラクタ・セット移行後にデータベース・スキーマをリカバリするタスク ....................................... 11-16 12 Character Set Scanner ユーティリティ Language and Character Set File Scanner ...................................................................................................... 12-2 LCSSCAN コマンドの構文 ......................................................................................................................... 12-3 例 : LCSSCAN コマンドの使用 .................................................................................................................. 12-4 Language and Character Set File Scanner のコマンドライン・ヘルプの利用 ................................... 12-5 サポート対象の言語とキャラクタ・セット ............................................................................................. 12-5 LCSSCAN エラー・メッセージ ................................................................................................................. 12-6 Database Character Set Scanner ....................................................................................................................... 12-7 文字データの変換テスト ............................................................................................................................. 12-7 Database Character Set Scanner のスキャン・モード .................................................................................. 12-8 全データベース・スキャン ......................................................................................................................... 12-8 ユーザー・スキャン ..................................................................................................................................... 12-8 表スキャン ..................................................................................................................................................... 12-8 Database Character Set Scanner のインストールと起動 .............................................................................. 12-9 Database Character Set Scanner 用のアクセス権限 ................................................................................ 12-9 Database Character Set Scanner のインストール .................................................................................... 12-9 Database Character Set Scanner の起動 .................................................................................................. 12-10 ix Database Character Set Scanner パラメータ・ファイルの作成 .......................................................... Database Character Set Scanner のコマンドライン・ヘルプの利用 .................................................. Database Character Set Scanner パラメータ ................................................................................................ Database Character Set Scanner セッション : 例 ......................................................................................... 全データベース・スキャン : 例 ................................................................................................................ ユーザー・スキャン : 例 ............................................................................................................................ 単一表のスキャン : 例 ................................................................................................................................ Database Character Set Scanner レポート .................................................................................................... データベース・スキャンのサマリー・レポート ................................................................................... データベース・スキャンの個別例外レポート ....................................................................................... データ・ディクショナリ内の変換可能データまたは不可逆データを処理する方法 ............................... Database Character Set Scanner の記憶域とパフォーマンスに関する考慮事項 .................................... Database Character Set Scanner の記憶域に関する考慮事項 .............................................................. Database Character Set Scanner のパフォーマンスに関する考慮事項 .............................................. Database Character Set Scanner に関する推奨事項と制限事項 .......................................................... Database Character Set Scanner の CSALTER スクリプト ....................................................................... CSALTER スクリプトのチェック・フェーズ ........................................................................................ CSALTER スクリプトの更新フェーズ .................................................................................................... Database Character Set Scanner のビュー .................................................................................................... CSMV$COLUMNS .................................................................................................................................... CSMV$CONSTRAINTS ............................................................................................................................ CSMV$ERRORS ......................................................................................................................................... CSMV$INDEXES ........................................................................................................................................ CSMV$TABLES .......................................................................................................................................... Database Character Set Scanner エラー・メッセージ ................................................................................ 13 12-11 12-11 12-12 12-23 12-23 12-24 12-25 12-26 12-27 12-35 12-38 12-40 12-40 12-41 12-42 12-43 12-43 12-45 12-46 12-46 12-47 12-47 12-48 12-48 12-49 ロケールのカスタマイズ Oracle Locale Builder ユーティリティの概要 ................................................................................................ 13-2 Oracle Locale Builder 用の Unicode フォントの構成 ............................................................................. 13-2 Oracle Locale Builder のユーザー・インタフェース .............................................................................. 13-4 Oracle Locale Builder のウィンドウとダイアログ・ボックス .............................................................. 13-6 Oracle Locale Builder を使用した新規言語定義の作成 .............................................................................. 13-10 Oracle Locale Builder を使用した新規地域定義の作成 .............................................................................. 13-14 タイム・ゾーン・データのカスタマイズ ............................................................................................... 13-19 NLS カレンダ・ユーティリティを使用したカレンダのカスタマイズ .............................................. 13-20 Oracle Locale Builder を使用したコード・チャートの表示 ...................................................................... 13-21 x Oracle Locale Builder を使用した新規キャラクタ・セット定義の作成 .................................................. ユーザー定義文字(UDC)とキャラクタ・セット .............................................................................. Oracle のキャラクタ・セット変換アーキテクチャ .............................................................................. Unicode 3.2 の Private Use Area .............................................................................................................. キャラクタ・セット間でのユーザー定義文字のクロス・リファレンス ........................................... 既存のキャラクタ・セットから新規キャラクタ・セットを作成する際のガイドライン ............... 例 : Oracle Locale Builder を使用した新規キャラクタ・セット定義の作成 .................................... Oracle Locale Builder を使用した新規言語ソートの作成 .......................................................................... 同じ発音区別記号を持つすべての文字のソート順序の変更 ............................................................... 発音区別記号を持つ 1 文字のソート順序の変更 ................................................................................... NLB ファイルの生成とインストール ............................................................................................................. 転送可能な NLB データ .................................................................................................................................... A 13-25 13-25 13-27 13-27 13-28 13-28 13-29 13-35 13-39 13-42 13-44 13-46 ロケール・データ 言語 ........................................................................................................................................................................... A-2 翻訳済みメッセージ ............................................................................................................................................... A-5 地域 ........................................................................................................................................................................... A-6 キャラクタ・セット ............................................................................................................................................... A-8 アジア地域言語のキャラクタ・セット ....................................................................................................... A-9 ヨーロッパ地域言語のキャラクタ・セット ............................................................................................ A-11 中東地域言語のキャラクタ・セット ........................................................................................................ A-18 ユニバーサル・キャラクタ・セット ........................................................................................................ A-20 キャラクタ・セット変換のサポート ........................................................................................................ A-21 サブセットとスーパーセット .................................................................................................................... A-21 言語およびキャラクタ・セット検出のサポート ............................................................................................ A-24 言語ソート ............................................................................................................................................................ A-27 暦法 ........................................................................................................................................................................ A-30 タイム・ゾーン名 ................................................................................................................................................ A-32 廃止されたロケール・データ ............................................................................................................................ A-39 Oracle の言語および地域定義ファイルの更新 ....................................................................................... A-39 廃止になった言語ソート ............................................................................................................................ A-40 言語が RUSSIAN の場合にデフォルト地域でなくなった CIS ............................................................. A-40 YUGOSLAVIA 地域の廃止 ........................................................................................................................ A-40 廃止になったキャラクタ・セットの新規名 ............................................................................................ A-41 AL24UTFFSS キャラクタ・セットのサポートの廃止 ........................................................................... A-42 ベンガル語定義の廃止 ................................................................................................................................ A-42 チェコスロバキア地域定義の廃止 ............................................................................................................ A-42 xi B Unicode 文字コードの割当て Unicode のコード範囲 .......................................................................................................................................... B-2 UTF-16 エンコーディング .................................................................................................................................... B-3 UTF-8 エンコーディング ...................................................................................................................................... B-4 用語集 索引 xii はじめに このマニュアルでは、データベースに対する Oracle グローバリゼーション・サポートにつ いて説明します。また、グローバリゼーション・サポート環境の設定、キャラクタ・セット の選択と移行、ロケール・データのカスタマイズ、言語ソート、グローバル環境でのプログ ラムおよび Unicode を使用したプログラムの実行の各操作を行う方法について説明します。 ここでは、次の項目について説明します。 ■ 対象読者 ■ このマニュアルの構成 ■ 関連ドキュメント ■ 表記規則 xiii 対象読者 このマニュアルは、次のタスクを実行するデータベース管理者、システム管理者およびデー タベース・アプリケーション開発者を対象にしています。 ■ グローバリゼーション・サポート環境の設定 ■ キャラクタ・セットの選択、分析または移行 ■ 言語に応じたデータのソート ■ ロケール・データのカスタマイズ ■ グローバル環境でのプログラムの作成 ■ Unicode の使用 このマニュアルを活用するには、リレーショナル・データベースの概念、Oracle サーバーの 基本概念および Oracle を稼働しているオペレーティング・システム環境についての理解が 必要です。 このマニュアルの構成 このマニュアルの構成は、次のとおりです。 第 1 章「グローバリゼーション・サポートの概要」 この章では、グローバリゼーションの概要と Oracle のグローバリゼーションに対するアプ ローチについて説明します。 第 2 章「キャラクタ・セットの選択」 この章では、キャラクタ・セットの選択方法について説明します。 第 3 章「グローバリゼーション・サポート環境の設定」 この章では、グローバリゼーション機能を有効に使用する例を記述します。 第 4 章「日時データ型とタイム・ゾーン・サポート」 この章では、Oracle の日時データ型と期間データ型、日時 SQL 関数およびタイム・ゾーン のサポートについて説明します。 第 5 章「言語ソートと文字列検索」 この章では、言語ソートについて説明します。 第 6 章「Unicode を使用した多言語データベースのサポート」 章「 この章では、データベースに関する Unicode の考慮事項について説明します。 xiv 第 7 章「Unicode を使用したプログラミング」 章「 この章では、Unicode 環境でのプログラミング方法について説明します。 第 8 章「Oracle Globalization Development Kit」 」 章「 この章では、Globalization Development Kit について説明します。 第 9 章「グローバル環境での SQL と PL/SQL のプログラミング」 この章では、SQL プログラミングに関するグローバリゼーションの考慮事項について説明し ます。 第 10 章「グローバル環境での OCI プログラミング」 この章では、OCI プログラミングに関するグローバリゼーションの考慮事項について説明し ます。 第 11 章「キャラクタ・セットの移行」 この章では、キャラクタ・セット変換の問題とキャラクタ・セットの移行について説明しま す。 第 12 章「Character Set Scanner ユーティリティ」 章「 この章では、文字データの分析に必要な Character Set Scanner ユーティリティの使用方法に ついて説明します。 第 13 章「ロケールのカスタマイズ」 この章では、ロケールのカスタマイズに必要な Oracle Locale Builder ユーティリティの使用 方法について説明します。また、タイム・ゾーン・ファイルとカレンダ・データのカスタマ イズについても説明します。 付録 A「ロケール・データ」 「ロケール・データ」 この付録では、Oracle サーバーでサポートされている言語、地域、キャラクタ・セットおよ びその他のロケール・データについて説明します。 付録 B「 「Unicode 文字コードの割当て」 この付録では、Unicode のコード割当てを記述します。 用語集 用語集では、グローバリゼーション・サポートに関する用語の定義を記述します。 xv 関連ドキュメント このマニュアルに記載されている例の多くは、Oracle のインストール時にデフォルトでイン ストールされるシード・データベースのサンプル・スキーマを使用しています。これらのス キーマがどのように作成されているか、およびその使用方法については、 『Oracle Database サンプル・スキーマ』を参照してください。 リリース・ノート、インストール関連ドキュメント、ホワイト・ペーパーまたはその他の関 連ドキュメントは、OTN-J(Oracle Technology Network Japan)から、無償でダウンロード できます。OTN-J を使用するには、オンラインでの登録が必要です。登録は、次の Web サ イトから無償で行えます。 http://otn.oracle.co.jp/membership/ すでに OTN-J のユーザー名およびパスワードを取得している場合は、次の URL で OTN -J Web サイトのドキュメントのセクションに直接接続できます。 http://otn.oracle.co.jp/document/ 表記規則 この項では、このマニュアルの本文およびコード例で使用される表記規則について説明しま す。この項の内容は次のとおりです。 xvi ■ 表記規則 ■ コード例の表記規則 ■ Microsoft Windows オペレーティング・システム環境での表記規則 本文の表記規則 本文では、特定の項目が一目でわかるように、次の表記規則を使用します。次の表に、その 規則と使用例を示します。 規則 意味 太字 この句を指定すると、索引構成表 索引構成表が作成されます。 太字は、本文中で定義されている用語およ 索引構成表 び用語集に記載されている用語を示します。 固定幅フォントの 大文字 固定幅フォントの大文字は、システム指定 の要素を示します。このような要素には、 パラメータ、権限、データ型、Recovery Manager キーワード、SQL キーワード、 SQL*Plus またはユーティリティ・コマン ド、パッケージおよびメソッドがあります。 また、システム指定の列名、データベース・ オブジェクト、データベース構造、ユー ザー名およびロールも含まれます。 固定幅フォントの 小文字 固定幅フォントの小文字は、実行可能ファ イル、ファイル名、ディレクトリ名および ユーザーが指定する要素のサンプルを示し ます。このような要素には、コンピュータ 名およびデータベース名、ネット・サービ ス名および接続識別子があります。また、 ユーザーが指定するデータベース・オブ ジェクトとデータベース構造、列名、パッ ケージとクラス、ユーザー名とロール、プ ログラム・ユニットおよびパラメータ値も 含まれます。 例 NUMBER 列に対してのみ、この句を指定できます。 BACKUP コマンドを使用して、データベースの バックアップを作成できます。 USER_TABLES データ・ディクショナリ・ビュー 内の TABLE_NAME 列を問い合せます。 DBMS_STATS.GENERATE_STATS プロシージャを 使用します。 sqlplus と入力して、SQL*Plus をオープンしま す。 パスワードは、orapwd ファイルで指定します。 /disk1/oracle/dbs ディレクトリ内のデータ・ ファイルおよび制御ファイルのバックアップを作 成します。 hr.departments 表には、department_id、 department_name および location_id 列があ ります。 QUERY_REWRITE_ENABLED 初期化パラメータを true に設定します。 oe ユーザーとして接続します。 固定幅フォントの 小文字の イタリック 注意 : プログラム要素には、大文字と小文 字を組み合せて使用するものもあります。 これらの要素は、記載されているとおりに 入力してください。 JRepUtil クラスが次のメソッドを実装します。 固定幅フォントの小文字のイタリックは、 プレースホルダまたは変数を示します。 parallel_clause を指定できます。 old_release.SQL を実行します。ここで、 old_release とはアップグレード前にインス トールしたリリースを示します。 xvii コード例の表記規則 コード例は、SQL、PL/SQL、SQL*Plus または他のコマンドライン文の例です。次のように 固定幅フォントで表示され、通常のテキストと区別されます。 SELECT username FROM dba_users WHERE username = 'MIGRATE'; 次の表に、コード例で使用される表記規則とその使用例を示します。 規則 意味 例 [ ] 大カッコは、カッコ内の項目を任意に選択 することを表します。大カッコは、入力し ないでください。 DECIMAL (digits [ , precision ]) { } 中カッコは、カッコ内の項目のうち、1 つが {ENABLE | DISABLE} 必須であることを表します。中カッコは、 入力しないでください。 | 縦線は、大カッコまたは中カッコ内の複数 の選択項目の区切りに使用します。項目の うちの 1 つを入力します。縦線は、入力し ないでください。 ... 水平の省略記号は、次のいずれかを示しま す。 ■ ■ {ENABLE | DISABLE} [COMPRESS | NOCOMPRESS] 例に直接関連しないコードの一部が省 略されている。 CREATE TABLE ... AS subquery; コードの一部を繰返すことができる。 SELECT col1, col2, ... , coln FROM employees; 垂直の省略記号は、例に直接関連しない複 数の行が省略されていることを示します。 SQL> SELECT NAME FROM V$DATAFILE; NAME -----------------------------------/fsl/dbs/tbs_01.dbf /fs1/dbs/tbs_02.dbf . . . /fsl/dbs/tbs_09.dbf 9 rows selected. その他の記号 大カッコ、中カッコ、縦線および省略記号 以外の記号は、記載されているとおりに入 力する必要があります。 acctbal NUMBER(11,2); acct CONSTANT NUMBER(4) := 3; イタリック体 イタリック体は、特定の値を指定する必要 があるプレースホルダや変数を示します。 CONNECT SYSTEM/system_password DB_NAME = database_name . . . xviii 規則 意味 例 大文字 大文字は、システム指定の要素を示します。 これらの要素は、ユーザー定義の要素と区 別するために大文字で示されます。大カッ コ内にないかぎり、表示されているとおり の順序および綴りで入力します。ただし、 大 / 小文字が区別されないため、小文字で も入力できます。 SELECT last_name, employee_id FROM employees; SELECT * FROM USER_TABLES; DROP TABLE hr.employees; 小文字 小文字は、ユーザー指定のプログラム要素 を示します。たとえば、表名、列名または ファイル名などです。 SELECT last_name, employee_id FROM employees; sqlplus hr/hr 注意 : プログラム要素には、大文字と小文 字を組み合せて使用するものもあります。 これらの要素は、記載されているとおりに 入力してください。 CREATE USER mjones IDENTIFIED BY ty3MU9; Microsoft Windows オペレーティング・システム環境での表記規則 次の表に、Microsoft Windows オペレーティング・システム環境での表記規則とその使用例 を示します。 規則 ファイル名および ディレクトリ名 Windows コマン ド・プロンプト 意味 例 ファイル名およびディレクトリ名は大 / 小 c:¥winnt"¥"system32 は C:¥WINNT¥SYSTEM32 と同じです。 文字が区別されません。特殊文字の左山 カッコ(<)、右山カッコ(>)、コロン(:)、 二重引用符(")、スラッシュ(/)、縦線 (|)およびハイフン(-)は使用できませ ん。円記号(¥)は、引用符で囲まれている 場合でも、要素のセパレータとして処理さ れます。Windows では、ファイル名が ¥¥ で 始まる場合、汎用命名規則が使用されてい ると解釈されます。 Windows コマンド・プロンプトには、カレ C:¥oracle¥oradata> ント・ディレクトリが表示されます。コマ ンド・プロンプトのエスケープ文字はカ レット(^)です。プロンプトは、現在作業 中のサブディレクトリを示します。このマ ニュアルでは、コマンド・プロンプトと呼 びます。 xix 規則 意味 例 特殊文字 Windows コマンド・プロンプトで二重引用 符(")のエスケープ文字として円記号(¥) が必要な場合があります。丸カッコおよび 一重引用符(')にはエスケープ文字は必要 ありません。エスケープ文字および特殊文 字の詳細は、Windows オペレーティング・ システムのドキュメントを参照してくださ い。 C:¥>exp scott/tiger TABLES=emp QUERY=¥"WHERE job='SALESMAN' and sal<1600¥" HOME_NAME Oracle ホームの名前を表します。ホーム名 には、英数字で 16 文字まで使用できます。 ホーム名に使用可能な特殊文字は、アン ダースコアのみです。 C:¥> net start OracleHOME_NAMETNSListener ORACLE_HOME および ORACLE_BASE Oracle8i より前のリリースでは、Oracle コ ンポーネントをインストールすると、すべ てのサブディレクトリは最上位の ORACLE_HOME の直下に置かれました。 ORACLE_HOME ディレクトリの名前は、 デフォルトでは次のいずれかです。 %ORACLE_HOME%¥rdbms¥admin ディレクトリへ 移動します。 ■ C:¥orant(Windows NT の場合) ■ C:¥orawin98(Windows 98 の場合) このリリースは、Optimal Flexible Architecture(OFA)のガイドラインに準拠 しています。ORACLE_HOME ディレクトリ 下に配置されないサブディレクトリもあり ます。最上位のディレクトリは ORACLE_BASE と呼ばれ、デフォルトでは C:¥oracle です。他の Oracle ソフトウェ アがインストールされていないコンピュー タに最新リリースの Oracle をインストール した場合、Oracle ホーム・ディレクトリは、 デフォルトで C:¥oracle¥orann に設定さ れます。nn は最新のリリース番号です。 Oracle ホーム・ディレクトリは、 ORACLE_BASE の直下に配置されます。 このマニュアルに示すディレクトリ・パス の例は、すべて OFA の表記規則に準拠して います。 xx C:¥>imp SYSTEM/password FROMUSER=scott TABLES=(emp, dept) グローバリゼーション・サポートの新機能 この項では、グローバリゼーション・サポートの新機能と、追加情報の参照先について説明 します。 xxi Unicode 3.2 のサポート このリリースは Unicode 3.2 をサポートしています。 関連項目 : 第 6 章「Unicode を使用した多言語データベースのサポート」 アクセント区別なしおよび大 / 小文字区別の言語ソートと問合せ Oracle には、ベース文字、アクセントおよびケース情報を使用して文字列をソートする言語 ソート機能と問合せ機能が用意されています。このリリースでは、ベース文字のみ(アクセ ント区別なし)またはベース文字とアクセント(大 / 小文字区別なし)のソートまたは問合 せを指定できます。 関連項目 : 5-8 ページ「言語ソート機能」 Character Set Scanner ユーティリティの拡張 Database Character Set Scanner および Converter では、オブジェクト型がサポートされるよ うになりました。 新しい LCSD を使用すると、Database Character Set Scanner(CSSCAN)では、LCSDATA パ ラメータで分類されたデータ・セルに対して言語およびキャラクタ・セット検出を実行でき ます。Database Character Set Scanner レポートも拡張されています。 Database Character Set Scanner の CSALTER スクリプト CSALTER スクリプトは、特殊なキャラクタ・セット移行処理のための DBA ツールです。 Language and Character Set File Scanner ユーティリティ Language and Character Set File Scanner(LCSSCAN)は、統計に基づく高パフォーマンスの ユーティリティであり、プレーン・ファイル・テキストで指定されていない場合にキャラク タ・セットと言語を判別します。 関連項目 : xxii 第 12 章「Character Set Scanner ユーティリティ」 Globalization Development Kit Oracle Globalization Development Kit(GDK)を使用すると、開発プロセスが簡素化され、 グローバルな多言語市場をサポートするインターネット・アプリケーションの開発コストが 削減されます。GDK には、グローバル・アプリケーションの作成時に設計、開発および配 置に関して発生する多数の問題に対処する API、ツールおよびドキュメントが組み込まれて います。GDK を使用すると、1 つのプログラムで世界中のあらゆる言語によるテキストを処 理できます。単一言語のサーバー・アプリケーションをビルドする場合とほとんど同じ労力 で、完全な多言語サーバーをビルドできます。 関連項目 : 第 8 章「Oracle Globalization Development Kit」 正規表現 このリリースは、POSIX 準拠の正規表現をサポートしており、UNIX や Java などのプログ ラミング環境で検索および置換機能が拡張されます。SQL では、この新機能は既存の SQL 関数(LIKE、REPLACE および INSTR など)に対する正規表現の拡張である新しい関数を 介して実装されます。この実装は多言語による問合せをサポートしており、ロケールが区別 されます。 関連項目 : 5-24 ページ「多言語環境での SQL 正規表現」 Unicode キャラクタ・セットのコード・チャートの表示 Oracle Locale Builder では、Unicode キャラクタ・セットのコード・チャートを表示できま す。 関連項目 : 13-21 ページ「Oracle Locale Builder を使用したコード・ チャートの表示」 ロケールのバリアント 以前のリリースの Oracle では、言語と定義は別個に定義されていました。このため、地域 定義はユーザーの言語設定から独立していました。このリリースでは、一部の地域にユー ザーの言語設定に基づいて異なる日付、時刻、数値および通貨書式を使用できます。この種 の言語依存の地域定義をロケールのバリアントと呼びます。 関連項目 : 3-9 ページ「ロケールのバリアント」 xxiii 転送可能な NLB データ あるプラットフォーム上で生成される NLB データを、FTP などを使用して別のプラット フォームに転送できます。転送された NLB ファイルは、元のプラットフォームで生成され た NLB ファイルと同じ方法で使用できます。これにより、あるプラットフォームでロケー ル・データを変更して他のプラットフォームにコピーできるため便利です。 関連項目 : 13-46 ページ「転送可能な NLB データ」 NLS_LENGTH_SEMANTICS NLS_LENGTH_SEMANTICS が環境変数としてサポートされるようになりました。 関連項目 : 3-46 ページ「NLS_LENGTH_SEMANTICS」 CLOB データ型と NCLOB データ型の間の暗黙的な変換 CLOB データ型と NCLOB データ型の間の暗黙的な変換がサポートされるようになりました。 関連項目 : 2-18 ページ「各国語キャラクタ・セットの選択」 Oracle の言語および地域定義ファイルの更新 Oracle Database 10g では、一部の言語および地域定義ファイルの内容が変更されています。 関連項目 : xxiv A-39 ページ「廃止されたロケール・データ」 1 グローバリゼーション・サポートの概要 この章では、Oracle グローバリゼーション・サポートの概要を説明します。この章の内容 は、次のとおりです。 ■ グローバリゼーション・サポートのアーキテクチャ ■ グローバリゼーション・サポートの機能 グローバリゼーション・サポートの概要 1-1 グローバリゼーション・サポートのアーキテクチャ グローバリゼーション・サポートのアーキテクチャ Oracle のグローバリゼーション・サポートによって、データの格納、処理および取出しをネ イティブ言語で実行できます。このアーキテクチャによって、データベース・ユーティリ ティ、エラー・メッセージ、ソート順序、日付、時刻、通貨単位、数値およびカレンダに関 する規則が、各国の言語やロケールに自動的に適応されます。 Oracle のグローバリゼーション・サポート機能は、以前は National Language Support (NLS)機能と呼ばれていました。National Language Support は、グローバリゼーション・ サポートのサブセットであり、各国語を選択してデータを特定のキャラクタ・セットで格納 する機能です。グローバリゼーション・サポートを使用すると、世界中から同時にアクセス して実行できる多言語アプリケーションやソフトウェア製品の開発が可能になります。アプ リケーションでは、ユーザー・インタフェースの内容表示とデータ処理に、ユーザーの母国 語と選択したロケールを使用できます。 オンデマンドのロケール・データ Oracle のグローバリゼーション・サポートは、Oracle NLS Runtime Library(NLSRTL)と ともに実装されます。NLS ランタイム・ライブラリは、広範囲にわたる言語非依存の関数の パッケージを提供します。これによって、適切なテキストと文字の処理および言語規則に 従った操作を行うことができます。特定の言語や地域に対応した関数の動作は、実行時に指 定してロードされたロケール固有データ・セットによって制御されます。 ロケール固有データは、Oracle でサポートされる各ロケールごとに独立したデータ・セット としての構造を持ちます。特定のロケールのデータを、他のロケール・データに依存せずに ロードできます。この設計の利点は、次のとおりです。 ■ ■ 必要なロケール・セットを選択してメモリー消費を管理できます。 他のロケールに影響を与えずに、特定のロケールのロケール・データを追加してカスタ マイズできます。 図 1-1 に、実行時のロケール固有データのロードを示します。この例では、フランス語デー タと日本語データが多言語データベースにロードされますが、ドイツ語データはロードされ ません。 1-2 Oracle Database グローバリゼーション・サポート・ガイド グローバリゼーション・サポートのアーキテクチャ 図 1-1 データベースへのロケール固有データのロード ロケール固有のデータは、$ORACLE_HOME/nls/data ディレクトリに格納されます。 ORA_NLS10 環境変数を定義する必要があるのは、ロケール固有のデータファイルの単一コ ピーがシステムの複数の Oracle ホームで共有される場合など、ロケール固有のデータファ イルについてデフォルトのディレクトリ位置を変更する必要がある場合のみです。 ロードする有効な NLS オブジェクトは、ブート・ファイルを使用して指定します。Oracle では、システムとユーザーの両方のブート・ファイルをサポートしています。ユーザーの ブート・ファイルを使用すると、そのデータベースで使用可能な NLS ロケール・オブジェ クトを柔軟に調整できます。また、新しいロケール・データを追加したり、一部のロケー ル・データ・コンポーネントをカスタマイズすることができます。 関連項目 : 第 13 章「ロケールのカスタマイズ」 グローバリゼーション・サポートの概要 1-3 グローバリゼーション・サポートのアーキテクチャ 多言語アプリケーションをサポートするアーキテクチャ データベースは、データベースの構成に使用されている言語を、複数層アプリケーションと クライアント / サーバー・アプリケーションでサポートできるように実装されます。 ロケール依存操作は、クライアントとデータベース・サーバーの両方にある複数のパラメー タと環境変数によって制御されます。データベース・サーバーでは、クライアント用に起動 された各セッションが他のセッションと同じまたは異なるロケールで実行され、同じまたは 異なる言語要件が指定されることがあります。 データベースには、セッションに依存しない NLS パラメータのセットが作成時に指定され ます。その 2 つのパラメータによって、データベース・キャラクタ・セットと各国語キャラ クタ・セット、つまり NCHAR、NVARCHAR2 および NCLOB データに指定できる代替 Unicode キャラクタ・セットを指定します。このパラメータは、テキスト・データをデータ ベースに格納するために使用するキャラクタ・セットを指定します。他のパラメータ(言語 や地域など)は、CHECK 制約の評価で使用されます。 クライアント・セッションとデータベース・サーバーが異なるキャラクタ・セットを指定し ている場合、データベースではキャラクタ・セットの文字列を自動的に変換します。 グローバリゼーション・サポートの観点では、すべてのアプリケーションは、Oracle インス タンスと物理的に同じマシン上で実行している場合でも、クライアントとみなされます。た とえば、Oracle ソフトウェア所有者である UNIX ユーザーが、SQL*Plus を RDBMS ソフト ウェアがインストールされている Oracle ホームから起動し、ORACLE_SID パラメータを指 定してアダプタ経由でデータベースに接続している場合、この SQL*Plus はクライアントと みなされます。その動作はクライアント側の NLS パラメータによって規定されます。 別の例をあげると、中間層がアプリケーション・サーバーの場合に、アプリケーションがク ライアントとみなされます。そのアプリケーション・サーバーによって起動される様々な セッションは、個別のクライアント・セッションとみなされます。 クライアント・アプリケーションが起動されると、環境設定に従ってクライアントの NLS 環境が初期化されます。ローカルで実行される NLS 操作は、すべてこの設定を使用して実 行されます。ローカル NLS 操作の例を次に示します。 ■ Oracle Developer アプリケーションの表示書式設定 ■ OCI 環境ハンドルを使用して NLS OCI 関数を実行するユーザー OCI コード アプリケーションをデータベースに接続すると、サーバー上にセッションが作成されます。 新しいセッションは、初期化パラメータ・ファイルに指定された NLS インスタンス・パラ メータに従って、NLS 環境を初期化します。この設定は、ALTER SESSION 文により、後で 変更できます。この文によって変更されるのは、そのセッションの NLS 環境のみです。 ローカル・クライアントの NLS 環境は変更されません。セッションの NLS 設定は、サー バー上で実行される SQL 文と PL/SQL 文の処理に使用されます。たとえば、ALTER SESSION 文を使用して NLS_LANGUAGE 初期化パラメータを Italian に設定します。 ALTER SESSION SET NLS_LANGUAGE=Italian; 1-4 Oracle Database グローバリゼーション・サポート・ガイド グローバリゼーション・サポートのアーキテクチャ SELECT 文を入力します。 SQL> SELECT last_name, hire_date, ROUND(salary/8,2) salary FROM employees; 結果は次のようになります。 LAST_NAME ------------------------Sciarra Urman Popp HIRE_DATE SALARY --------- ---------30-SET-97 962.5 07-MAR-98 975 07-DIC-99 862.5 月名の略称にイタリア語が使用されていることに注意してください。 NLS_LANG 環境設定がクライアント側で定義されている場合は、接続直後に ALTER SESSION 文が暗黙的にクライアントとセッションの NLS 環境を同期させます。 関連項目 : ■ 第 10 章「グローバル環境での OCI プログラミング」 ■ 第 3 章「グローバリゼーション・サポート環境の設定」 多言語データベースでの Unicode の使用 Unicode とは、エンコードされたユニバーサル・キャラクタ・セットのことです。このセッ トを使用すると、1 つのキャラクタ・セットを使用して任意の言語の情報を格納できます。 Unicode には、プラットフォーム、プログラムまたは言語に関係なく、すべての文字に対す る一意のコード値が用意されている。 Unicode には、次の利点があります。 ■ ■ ■ キャラクタ・セット変換機能と言語ソート機能が簡素化されます。 ネイティブのマルチバイト・キャラクタ・セットに比べてパフォーマンスが改善されま す。 Unicode 規格に基づく Unicode データ型がサポートされます。 関連項目 : ■ 第 6 章「Unicode を使用した多言語データベースのサポート」 ■ 第 7 章「Unicode を使用したプログラミング」 ■ 6-9 ページ「Unicode データ型を使用した多言語サポートの有効化」 グローバリゼーション・サポートの概要 1-5 グローバリゼーション・サポートの機能 グローバリゼーション・サポートの機能 Oracle の標準機能には、次の内容が含まれています。 ■ 言語サポート ■ 地域サポート ■ 日付と時刻の書式 ■ 通貨と数値の書式 ■ カレンダ機能 ■ 言語ソート ■ キャラクタ・セット・サポート ■ キャラクタ・セマンティクス ■ ロケール・データとカレンダ・データのカスタマイズ ■ Unicode のサポート 言語サポート データベースでは、データの格納、処理および取出しをネイティブ言語で行うことができま す。データベースに格納できる言語は、Oracle がサポートしているキャラクタ・セットでエ ンコードされているスクリプトで記述されたすべての言語です。Unicode データベースと データ型を使用することで、Oracle データベースは、ほとんどの現代言語をサポートしてい ます。 各国語のサブセットに対しては、追加サポートが用意されています。たとえば、データベー スでは、翻訳された月の名前を使用して日付を表示したり、文化的な慣習に従ってテキス ト・データをソートできます。 このマニュアルで使用している言語サポート 言語サポートという用語は、言語依存の追加機能(日付の表 言語サポート 示やテキストのソートなど)を指しており、その言語のテキストを格納できることを示すわ けではありません。 一部のサポート対象言語については、翻訳されたエラー・メッセージやデータベース・ユー ティリティに関する翻訳済みユーザー・インタフェースが用意されています。 関連項目 : ■ ■ ■ 第 3 章「グローバリゼーション・サポート環境の設定」 Oracle がサポートするすべての言語名とその略称リストは、A-2 ペー ジの「言語」を参照してください。 Oracle メッセージが翻訳されている言語のリストは、A-5 ページの 「翻訳済みメッセージ」を参照してください。 1-6 Oracle Database グローバリゼーション・サポート・ガイド グローバリゼーション・サポートの機能 地域サポート データベースでは、地域に固有な文化的慣習をサポートしています。デフォルトのローカル 時刻書式、日付書式、数値および通貨単位に関する規則は、ローカル地域設定によって異な ります。多様な NLS パラメータの設定によって、データベース・セッションでは様々な文 化的設定を使用できます。たとえば、地域が AMERICA と定義されている場合でも、指定し たデータベース・セッションに、主要通貨としてユーロ(EUR)を、第 2 通貨として日本円 (JPY)を設定できます。 関連項目 : ■ ■ 第 3 章「グローバリゼーション・サポート環境の設定」 Oracle サーバーでサポートされている地域のリストは、A-6 ページの 「地域」を参照してください。 日付と時刻の書式 時間、日、月および年に関する多様な表記規則は、ローカル書式で処理されます。たとえ ば、日付の表示の場合、英国では DD-MON-YYYY 書式が使用され、日本では一般的に YYYY-MM-DD 書式が使用されます。 タイム・ゾーンや夏時間もサポートされます。 関連項目 : ■ 第 3 章「グローバリゼーション・サポート環境の設定」 ■ 第 4 章「日時データ型とタイム・ゾーン・サポート」 ■ 『Oracle Database SQL リファレンス』 通貨と数値の書式 通貨、貸方および借方の記号は、ローカル書式で表すことができます。基数記号と 3 桁区切 りは、ロケールで定義できます。たとえば、小数点は、米国ではドット(.)ですが、フラン スではカンマ(,)です。したがって、金額 $1,234 の持つ意味は、国によって異なります。 関連項目 : 第 3 章「グローバリゼーション・サポート環境の設定」 グローバリゼーション・サポートの概要 1-7 グローバリゼーション・サポートの機能 カレンダ機能 世界中で様々な暦法が使用されています。Oracle では、グレゴリオ暦、日本の元号暦、台湾 暦、タイ仏教暦、ペルシャ暦、英国版イスラム暦およびイスラム暦の 7 つの暦法をサポート しています。 関連項目 : ■ ■ 第 3 章「グローバリゼーション・サポート環境の設定」 サポートされているカレンダのリストは、A-30 ページの「暦法」を参 照してください。 言語ソート Oracle には、文化に応じた正確なソートおよび大 / 小文字の変換を行うために、言語の定義 が用意されています。基本定義では、文字列を独立した文字の連続として扱います。拡張定 義では、特殊な事例として扱う必要のある文字のペアを認識します。 基本定義を使用して大文字または小文字に変換された文字列は、常に同じ長さです。拡張定 義を使用して変換された文字列は、長くなったり短くなったりすることがあります。 関連項目 : 第 5 章「言語ソートと文字列検索」 キャラクタ・セット・サポート Oracle では、多数のシングルバイト、マルチバイトおよび固定幅のコード体系をサポートし ています。これらのコード体系は、各国の規格、国際規格およびベンダー固有の規格に基づ いています。 関連項目 : ■ ■ 第 2 章「キャラクタ・セットの選択」 サポートされるキャラクタ・セットのリストは、A-8 ページの「キャ ラクタ・セット」を参照してください。 キャラクタ・セマンティクス Oracle には、キャラクタ・セマンティクスが用意されています。キャラクタ・セマンティク スは、可変幅のマルチバイト文字列の記憶要件をバイト数ではなく文字数で定義する場合に 役立ちます。 関連項目 : 2-11 ページ「長さセマンティクス」 1-8 Oracle Database グローバリゼーション・サポート・ガイド グローバリゼーション・サポートの機能 ロケール・データとカレンダ・データのカスタマイズ Oracle Locale Builder を使用して、言語、キャラクタ・セット、地域または言語ソートなど のロケール・データをカスタマイズできます。 NLS カレンダ・ユーティリティを使用すると、カレンダをカスタマイズできます。 関連項目 : ■ ■ 第 13 章「ロケールのカスタマイズ」 13-20 ページ「NLS カレンダ・ユーティリティを使用したカレンダの カスタマイズ」 Unicode のサポート 次の 2 つの方法で Unicode 文字を Oracle データベースに格納できます。 ■ ■ UTF-8 エンコードされた文字を SQL CHAR データ型として格納できるように、Unicode データベースを作成できます。 Unicode データ型を使用して、特定の列の多言語データをサポートできます。データ ベース・キャラクタ・セットの定義方法に関係なく、SQL NCHAR データ型の列に Unicode 文字を格納できます。NCHAR データ型は Unicode データ型専用です。 関連項目 : 第 6 章「Unicode を使用した多言語データベースのサポート」 グローバリゼーション・サポートの概要 1-9 グローバリゼーション・サポートの機能 1-10 Oracle Database グローバリゼーション・サポート・ガイド 2 キャラクタ・セットの選択 この章では、キャラクタ・セットの選択方法について説明します。この章の内容は、次のと おりです。 ■ キャラクタ・セット・エンコーディング ■ 長さセマンティクス ■ Oracle データベース・キャラクタ・セットの選択 ■ データベース作成後のキャラクタ・セットの変更 ■ 単一言語データベースの使用例 ■ 多言語データベースの使用例 キャラクタ・セットの選択 2-1 キャラクタ・セット・エンコーディング キャラクタ・セット・エンコーディング 文字を処理する場合、コンピュータ・システムは文字をグラフィカルな表現としてではなく 数値コードとして処理します。たとえば、データベースに文字 A を格納すると、実際はソフ トウェアによって解析される数値コードが格納されます。特に、異なるキャラクタ・セット 間のデータ変換を必要とする可能性があるグローバル環境では、この数値コードが重要にな ります。 この項の内容は、次のとおりです。 ■ エンコードされたキャラクタ・セットについて ■ エンコードされる文字 ■ キャラクタ・セットでサポートされている文字 ■ 文字のエンコード方法 ■ Oracle のキャラクタ・セットのネーミング規則 エンコードされたキャラクタ・セットについて データベースの作成時に、エンコードされたキャラクタ・セットを指定します。キャラク タ・セットの選択によって、データベース内で表現できる言語が決定します。また、キャラ クタ・セットの選択は次の方法にも影響します。 ■ データベース・スキーマの作成方法 ■ 文字データを処理するアプリケーションの開発方法 ■ オペレーティング・システムでのデータベースの動作 ■ パフォーマンス ■ キャラクタ・セットの格納に必要な記憶域 文字の集まり(アルファベット文字、表意文字、記号、句読点および制御文字など)は、 キャラクタ・セットとしてエンコードできます。エンコードされたキャラクタ・セット エンコードされたキャラクタ・セットで エンコードされたキャラクタ・セット は、文字レパートリ内のそれぞれの文字に一意の数値コードが割り当てられています。数値 コードはコード・ポイント コード・ポイントまたはエンコーディング値 エンコーディング値と呼ばれます。表 2-1 に、ASCII キャ コード・ポイント エンコーディング値 ラクタ・セットの 16 進コード値が割り当てられている文字の例を示します。 表 2-1 ASCII キャラクタ・セットでエンコードされた文字 文字 説明 16 進コード値 ! 感嘆符 21 # 数値記号 23 $ ドル記号 24 1 数字の 1 31 2-2 Oracle Database グローバリゼーション・サポート・ガイド キャラクタ・セット・エンコーディング 表 2-1 ASCII キャラクタ・セットでエンコードされた文字(続き) 文字 説明 16 進コード値 2 数字の 2 32 3 数字の 3 33 A 大文字の A 41 B 大文字の B 42 C 大文字の C 43 a 小文字の a 61 b 小文字の b 62 c 小文字の c 63 コンピュータ業界では、様々にエンコードされたキャラクタ・セットが使用されています。 各キャラクタ・セットは、次の点で異なります。 ■ 使用可能な文字数 ■ 使用可能な文字(文字レパートリ 文字レパートリ) 文字レパートリ ■ 書込み用スクリプトとそれによって表される言語 ■ それぞれの文字に割り当てられたコード値 ■ 文字を表現するために使用するコード体系 Oracle では、各国の規格、国際規格およびベンダー固有のエンコードされたキャラクタ・ セット規格のほとんどすべてがサポートされています。 関連項目 : Oracle でサポートされているすべてのキャラクタ・セットの リストは、A-8 ページの「キャラクタ・セット」を参照してください。 キャラクタ・セットの選択 2-3 キャラクタ・セット・エンコーディング エンコードされる文字 キャラクタ・セットでエンコードされる文字は、表現する記述法によって異なります。記述 法は、1 つの言語または 1 つの言語グループを表現するために使用され、次の 2 つに分類で きます。 ■ 表音的記述法 ■ 表意的記述法 この項の内容は、次のとおりです。 ■ 句読点、制御文字、数字および記号 ■ 記述方向 表音的記述法 表音的記述法は、1 つの言語に対応付けられた様々な音声を表現する、複数の記号で構成さ れています。たとえば、ギリシア語、ラテン語、キリル文字およびデーバナーガリ語はすべ て、アルファベットに基づいた表音的記述法です。アルファベットは、複数の言語を表現で きます。たとえば、ラテン・アルファベットでは、多くの西ヨーロッパ諸国の言語(フラン ス語、ドイツ語、英語など)を表現できます。 表音的記述法に対応付けられた文字は、文字レパートリが通常 256 文字より少ないため、一 般的には 1 バイトでエンコードできます。 表意的記述法 表意的記述法は、言語の音声ではなく、単語の意味を表す表意文字または象形文字で構成さ れています。中国語と日本語は、何万という表意文字に基づいた表意的記述法の例です。表 意的記述法を使用する言語では、表音文字セット 表音文字セットを使用する場合もあります。表音文字セッ 表音文字セット トでは、追加の表音的情報を伝達する方法が提供されます。たとえば、日本語には 2 つの表 音文字セットがあり、通常、文法的な要素にはひらがなが、外来語や擬音語にはカタカナが 使用されます。 表意的記述法に対応付けられた文字は、文字のレパートリが何万とあるため、一般的には複 数バイトでエンコードします。 句読点、制御文字、数字および記号 言語スクリプトのエンコーディングに加えて、次のように他の特殊文字もエンコードする必 要があります。 ■ カンマ、ピリオドおよびアポストロフィなどの句読点 ■ 数字 ■ 通貨記号や数学演算子などの特殊な記号 ■ キャリッジ・リターンやタブなどの制御文字 2-4 Oracle Database グローバリゼーション・サポート・ガイド キャラクタ・セット・エンコーディング 記述方向 西洋言語のほとんどは、ページの上から下へ向かって左から右へ記述されます。東アジア地 域言語は、通常、ページの右から左に向かって上から下へ記述されます。ただし、西洋言語 を翻訳した専門書には例外が多く見られます。アラビア語とヘブライ語は、上から下へ向 かって右から左へ記述されます。 アラビア語とヘブライ語では、数字の記述方向が逆になります。テキストが右から左に書か れている場合でも、文中の数字は左から右に向かって書かれます。たとえば、 「I wrote 32 books」は「skoob 32 etorw I」と書かれます。書込み方向に関係なく、データは論理順序で 格納されます。論理順序は、入力している言語の画面上での表示方法ではなく、その言語の 入力で使用されている順序を意味します。 記述方向は、文字のエンコーディングには影響しません。 キャラクタ・セットでサポートされている文字 様々なキャラクタ・セットによって、様々な文字レパートリがサポートされています。一般 的に、キャラクタ・セットは特定の書込みスクリプトに基づいているため、複数の言語をサ ポートできます。キャラクタ・セットが最初に開発されたとき、文字レパートリには制限が ありました。今でも、特定の文字を複数のプラットフォームで使用すると、問題が発生する 場合があります。次の CHAR 文字および VARCHAR 文字は、すべての Oracle データベース・ キャラクタ・セットで表示可能で、どのプラットフォームにもトランスポートできます。 ■ 大文字と小文字の英文字(A ~ Z および a ~ z) ■ アラビア数字(0 ~ 9) ■ 句読点マーク % ‘ ' ( ) * + - , . / ¥ : ; < > = ! _ & ~ { } | ^ ? $ # @ " [ ] ■ 制御文字(スペース、水平タブ、垂直タブ、改ページ) これ以外の文字を使用する場合は、選択したデータベース・キャラクタ・セットでデータが サポートされているかどうか注意する必要があります。 適切なデータ変換を行うには、NLS_LANG パラメータを適切に設定する必要があります。 NLS_LANG パラメータでは、クライアント・オペレーティング・システムの設定を反映する キャラクタ・セットを指定してください。NLS_LANG を適切に設定すると、クライアント・ オペレーティング・システムの文字コード体系からデータベース・キャラクタ・セットへと 適切に変換できます。これらの設定が同じときは、送受信されるデータはデータベース・ キャラクタ・セットと同一のキャラクタ・セットでエンコードされているとみなされ、妥当 性チェックや変換は保証されません。このため、変換が必要な場合は、データが破損する可 能性があります。 キャラクタ・セット間での変換中に、Oracle はクライアント側のデータが NLS_LANG パラ メータで指定されたキャラクタ・セットでエンコードされるものと想定します。文字列に (たとえば、CHR または CONVERT SQL 関数を使用して)他の値を入力すると、その値は、 データベースに送信されたときに、適切に変換されないため損なわれる可能性があります。 環境を適切に構成しており、データベース・キャラクタ・セットでデータベースに入力され キャラクタ・セットの選択 2-5 キャラクタ・セット・エンコーディング る可能性のある文字データのレパートリ全体がサポートされていれば、現行のデータベー ス・キャラクタ・セットを変更する必要はありません。ただし、企業がよりグローバルにな り、追加の文字や新規の言語のサポートが必要になった場合は、より大きな文字レパートリ を持つキャラクタ・セットの選択が必要になる可能性があります。このような場合は、 Unicode データベースとデータ型の使用をお薦めします。 関連項目 : ■ ■ ■ 第 6 章「Unicode を使用した多言語データベースのサポート」 CHR および CONVERT SQL 関数の詳細は、『Oracle Database SQL リ ファレンス』を参照してください。 13-21 ページ「Oracle Locale Builder を使用したコード・チャートの表 示」 ASCII エンコーディング 表 2-2 に、ASCII 文字がどのようにエンコードされているかを示します。行および列のヘッ ダーは、16 進数字を示しています。文字のコード値を調べるには、列の数字の次に行の数字 を読みます。たとえば、文字 A のコード値は 0x41 です。 表 2-2 7 ビット ASCII キャラクタ・セット - 0 1 2 3 4 5 6 7 0 NUL DLE SP 0 @ P ' p 1 SOH DC1 ! 1 A Q a q 2 STX DC2 " 2 B R b r 3 ETX DC3 # 3 C S c s 4 EOT DC4 $ 4 D T d t 5 ENQ NAK % 5 E U e u 6 ACK SYN & 6 F V f v 7 BEL ETB ' 7 G W g w 8 BS CAN ( 8 H X h x 9 TAB EM ) 9 I Y i y A LF SUB * : J Z j z B VT ESC + ; K [ k { C FF FS , < L ¥ l | D CR GS - = M ] m } E SO RS . > N ^ n ~ F SI 米国 / ? O _ o DEL 2-6 Oracle Database グローバリゼーション・サポート・ガイド キャラクタ・セット・エンコーディング 世界中のユーザーの要求を満たすためにキャラクタ・セットは進化を続け、英語以外の言語 をサポートするために新規キャラクタ・セットが作成されました。一般的に、この新規キャ ラクタ・セットでは、同じスクリプトに基づいた関連のある言語グループがサポートされて います。たとえば、ISO 8859 キャラクタ・セット・シリーズは、多様なヨーロッパ諸国の言 語をサポートするために作成されました。表 2-3 に、ISO 8859 キャラクタ・セットでサポー トされている言語を示します。 表 2-3 ISO 8859 キャラクタ・セット 規格 サポートしている言語 ISO 8859-1 西ヨーロッパ諸国の言語(アルバニア語、バスク語、ブルトン語、カタロニア語、デンマーク 語、オランダ語、英語、フェロー語、フィンランド語、フランス語、ドイツ語、グリーンランド 語、アイスランド語、アイルランドのゲール語、イタリア語、ラテン語、ルクセンブルク語、ノ ルウェー語、ポルトガル語、レートロマンス語、スコットランドのゲール語、スペイン語、ス ウェーデン語) ISO 8859-2 東ヨーロッパ諸国の言語(アルバニア語、クロアチア語、チェコ語、英語、ドイツ語、ハンガ リー語、ラテン語、ポーランド語、ルーマニア語、スロバキア語、スロベニア語、セルビア語) ISO 8859-3 南東ヨーロッパ諸国の言語(アフリカーンス語、カタロニア語、オランダ語、英語、エスペラン ト語、ドイツ語、イタリア語、マルタ語、スペイン語、トルコ語) ISO 8859-4 北ヨーロッパ諸国の言語(デンマーク語、英語、エストニア語、フィンランド語、ドイツ語、グ リーンランド語、ラテン語、ラトビア語、リトアニア語、ノルウェー語、サーミ語、スロベニア 語、スウェーデン語) ISO 8859-5 東ヨーロッパ諸国の言語(キリル文字ベース : ブルガリア語、ベラルーシ語、マケドニア語、ロ シア語、セルビア語、ウクライナ語) ISO 8859-6 アラビア語 ISO 8859-7 ギリシア語 ISO 8859-8 ヘブライ語 ISO 8859-9 西ヨーロッパ諸国の言語(アルバニア語、バスク語、ブルトン語、カタロニア語、コーンウォー ル語、デンマーク語、オランダ語、英語、フィンランド語、フランス語、フリースランド語、ガ リシア語、ドイツ語、グリーンランド語、アイルランドのゲール語、イタリア語、ラテン語、ル クセンブルク語、ノルウェー語、ポルトガル語、レートロマンス語、スコットランドのゲール 語、スペイン語、スウェーデン語、トルコ語) ISO 8859-10 北ヨーロッパ諸国の言語(デンマーク語、英語、エストニア語、フェロー語、フィンランド語、 ドイツ語、グリーンランド語、アイスランド語、アイルランドのゲール語、ラテン語、リトアニ ア語、ノルウェー語、サーミ語、スロベニア語、スウェーデン語) ISO 8859-13 バルト海沿岸諸国の言語(英語、エストニア語、フィンランド語、ラテン語、ラトビア語、ノル ウェー語) キャラクタ・セットの選択 2-7 キャラクタ・セット・エンコーディング 表 2-3 ISO 8859 キャラクタ・セット(続き) 規格 サポートしている言語 ISO 8859-14 ケルト系言語(アルバニア語、バスク語、ブルトン語、カタロニア語、コーンウォール語、デン マーク語、英語、ガリシア語、ドイツ語、グリーンランド語、アイルランドのゲール語、イタリ ア語、ラテン語、ルクセンブルク語、マン島のゲール語、ノルウェー語、ポルトガル語、レート ロマンス語、スコットランドのゲール語、スペイン語、スウェーデン語、ウェールズ語) ISO 8859-15 西ヨーロッパ諸国の言語(アルバニア語、バスク語、ブルトン語、カタロニア語、デンマーク 語、オランダ語、英語、エストニア語、フェロー語、フィンランド語、フランス語、フリースラ ンド語、ガルシア語、ドイツ語、グリーンランド語、アイスランド語、アイルランドのゲール 語、イタリア語、ラテン語、ルクセンブルク語、ノルウェー語、ポルトガル語、レートロマンス 語、スコットランドのゲール語、スペイン語、スウェーデン語) キャラクタ・セットは、多言語を制限付きでサポートしてきました。この制限とは、類似す るスクリプトに基づく言語グループにかぎりサポートしてきたという意味です。最近では、 ユニバーサル・キャラクタ・セットが、多言語サポートのための有効なソリューションとみ なされるようになってきました。Unicode は、このようなユニバーサル・キャラクタ・セッ トの 1 つで、現代世界の主要なスクリプトのほとんどを包含しています。Unicode キャラク タ・セットは、94,000 種類以上の文字をサポートしています。 関連項目 : 第 6 章「Unicode を使用した多言語データベースのサポート」 文字のエンコード方法 コンピュータ業界では、様々なタイプのコード体系が作成されてきました。選択するキャラ クタ・セットによって、使用するコード体系の種類が異なります。コード体系には様々なパ フォーマンス特性があります。これらの特性は、データベース・スキーマやアプリケーショ ンの開発に影響を及ぼす場合があります。選択したキャラクタ・セットは、次のコード体系 のいずれかを使用します。 ■ シングルバイト・コード体系 ■ マルチバイト・コード体系 2-8 Oracle Database グローバリゼーション・サポート・ガイド キャラクタ・セット・エンコーディング シングルバイト・コード体系 シングルバイト・コード体系は効率的です。シングルバイトの 1 文字は 1 バイトで表現され るため、文字を表現するのに必要な領域量が最も小さく、処理およびプログラミングでの使 用が容易です。シングルバイト・コード体系は、次のいずれかとして分類されます。 ■ 7 ビット・コード体系 シングルバイト 7 ビット・コード体系は、128 文字までの文字を定義でき、通常、1 つ の言語のみをサポートします。最も一般的なシングルバイト・キャラクタ・セットは、 ASCII(American Standard Code for Information Interchange)で、コンピュータ処理 の初期から使用されています。 ■ 8 ビット・コード体系 シングルバイト 8 ビット・コード体系は、256 文字までの文字を定義でき、通常、1 つ の関連言語グループをサポートします。たとえば、ISO 8859-1 は、西ヨーロッパ諸国の 多数の言語をサポートしています。図 2-1 に ISO 8859-1 の 8 ビット・コード体系を示し ます。 図 2-1 ISO 8859-1 の 8 ビット・コード体系 キャラクタ・セットの選択 2-9 キャラクタ・セット・エンコーディング マルチバイト・コード体系 マルチバイト・コード体系は、中国語や日本語のようなアジア言語の表意文字をサポートす るために必要です。これは、中国語や日本語では何千という文字が使用されるためです。こ のようなコード体系では、1 文字を表現するために固定または可変のバイト数を使用します。 ■ 固定幅マルチバイト・コード体系 固定幅マルチバイト・コード体系では、各文字が固定のバイト数で表現されます。マル チバイト・コード体系では、バイト数は 2 以上です。 ■ 可変幅マルチバイト・コード体系 可変幅コード体系は、1 バイト以上を使用して 1 つの文字を表現します。一部のマルチ バイト・コード体系は、特定のビットを使用して、1 文字を表現するためのバイト数を 示します。たとえば、1 文字の表現に使用する最大のバイト数が 2 バイトの場合は、最 上位ビットを使用して、そのバイトがシングルバイト文字であるか、ダブルバイト文字 の 1 番目のバイトであるかを示します。 ■ シフト・センシティブ可変幅マルチバイト・コード体系 一部の可変幅コード体系では、制御コードを使用して、同じコード値を持つシングルバ イト文字とマルチバイト文字が区別されます。シフトアウト・コードは後続の文字がマ ルチバイトであることを示します。シフトイン・コードは後続の文字がシングルバイト であることを示します。シフト・センシティブ・コード体系は、主に IBM プラット フォームで使用されます。ISO-2022 キャラクタ・セットは、データベース・キャラク タ・セットとしては使用できませんが、メール・サーバーなどのアプリケーションには 使用できることに注意してください。 Oracle のキャラクタ・セットのネーミング規則 Oracle のキャラクタ・セット名には次のネーミング規則が使用されます。 <region><number of bits used to represent a character><standard character set name>[S|C] 名前のうち山カッコで囲まれた各部は連結されます。オプションの S または C を使用して、 サーバー(S)またはクライアント(C)でのみ使用できるキャラクタ・セットを区別しま す。 注意 : Macintosh プラットフォームではサーバー・キャラクタ・セット (S)を使用します。Macintosh のクライアント・キャラクタ・セットは、 現在使用されていません。EBCDIC プラットフォームでは、サーバー上で はサーバー・キャラクタ・セット(S) 、クライアント上ではクライアン ト・キャラクタ・セット(C)を使用します。 注意 : UTF8 および UTFE は、このネーミング規則の例外です。 2-10 Oracle Database グローバリゼーション・サポート・ガイド 長さセマンティクス 表 2-4 に、Oracle のキャラクタ・セット名の例を示します。 表 2-4 Oracle のキャラクタ・セット名の例 Oracle キャラクタ・ セット名 説明 地域 1 文字の表現 に使用される 標準キャラクタ・ ビット数 セット名 US7ASCII U.S. 7 ビット ASCII 米国 7 WE8ISO8859P1 西ヨーロッパ 8 ビット ISO 8859 Part1 WE(西ヨーロッパ) 8 ISO8859 Part 1 JA16SJIS 日本語 16 ビット シフト JIS JA SJIS 16 ASCII 長さセマンティクス シングルバイト・キャラクタ・セットの場合、文字列のバイト数と文字数は同じです。マル チバイト・キャラクタ・セットの場合は、1 文字または 1 つのコード・ポイントが 1 つ以上 のバイトで構成されています。可変幅キャラクタ・セットの場合は、バイト長に基づく文字 数の計算が困難な場合があります。列の長さをバイト数単位で計算することをバイト・セマ バイト・セマ ンティクス、文字数単位で計算することをキャラクタ・セマンティクス キャラクタ・セマンティクスと呼びます。 ンティクス キャラクタ・セマンティクス キャラクタ・セマンティクスは、Oracle9i で導入されました。キャラクタ・セマンティクス は、可変幅のマルチバイト文字列の記憶要件を定義する場合に役立ちます。たとえば、 Unicode データベース(AL32UTF8)で、VARCHAR2 列を英語の 5 文字とともに最大 5 文字 の中国語文字を格納できるように定義する必要があるとします。バイト・セマンティクスを 使用すると、この列には、長さ 3 バイトである中国語文字用に 15 バイトと、長さ 1 バイト である英語文字用に 5 バイト、合計 20 バイトが必要です。キャラクタ・セマンティクスを 使用すると、この列に必要な文字数は 10 となります。 次の式では、バイト・セマンティクスが使用されています。 ■ VARCHAR2(20 BYTE) ■ SUBSTRB(string, 1, 20) VARCHAR2 式の BYTE 修飾子と SQL 関数名の B 接尾辞に注意してください。 次の式では、キャラクタ・セマンティクスが使用されています。 ■ VARCHAR2(10 CHAR) ■ SUBSTR(string, 1, 10) VARCHAR2 式の CHAR 修飾子に注意してください。 キャラクタ・セットの選択 2-11 長さセマンティクス 文字データ型の新しい列にバイト・セマンティクスとキャラクタ・セマンティクスのどちら が使用されるかは、NLS_LENGTH_SEMANTICS 初期化パラメータによって決定されます。こ のパラメータのデフォルト値は BYTE です。前述の VARCHAR2 の定義に示されている BYTE および CHAR 修飾子は、データベースにセマンティクスを混在させる結果となる可能性があ るため、できるだけ使用しないでください。かわりに、初期化パラメータ・ファイル内で NLS_LENGTH_SEMANTICS を設定し、NLS_LENGTH_SEMANTICS の値に基づいてデフォル トのセマンティクスを使用するように列のデータ型を定義します。 バイト・セマンティクスは、データベース・キャラクタ・セットのデフォルトです。文字長 セマンティクスは NCHAR データ型のデフォルトであり、このデータ型に使用できる唯一の 長さセマンティクスです。NCHAR の定義には、CHAR または BYTE 修飾子を指定できません。 次の例を考えてみます。 CREATE TABLE employees ( employee_id NUMBER(4) , last_name NVARCHAR2(10) , job_id NVARCHAR2(9) , manager_id NUMBER(4) , hire_date DATE , salary NUMBER(7,2) , department_id NUMBER(2) ) ; NCHAR のキャラクタ・セットが AL16UTF16 の場合、last_name に保持できるのは最大 10 個の Unicode コード・ポイントです。または最大 20 バイトです。 図 2-2 に、UTF-8 キャラクタ・セットで各種文字を格納するために必要なバイト数を示しま す。ASCII 文字には 1 バイト、ラテン語文字とギリシャ語文字には 2 バイト、アジア言語の 文字には 3 バイト、補助文字には 4 バイトの記憶域が必要です。 2-12 Oracle Database グローバリゼーション・サポート・ガイド 長さセマンティクス 図 2-2 各種文字の格納バイト数 関連項目 : ■ ■ ■ ■ SUBSTR および SUBSTRB 関数の詳細は、9-7 ページの「様々な長さセ マンティクスに使用する SQL 関数」を参照してください。 NLS_LENGTH_SEMANTICS 初期化パラメータの詳細は、3-46 ページの 「長さセマンティクス」を参照してください。 Unicode と NCHAR データ型の詳細は、第 6 章「Unicode を使用した多 言語データベースのサポート」を参照してください。 SUBSTRB および SUBSTR 関数と文字データ型の BYTE および CHAR 修 飾子の詳細は、 『Oracle Database SQL リファレンス』を参照してくだ さい。 キャラクタ・セットの選択 2-13 Oracle データベース・キャラクタ・セットの選択 Oracle データベース・キャラクタ・セットの選択 Oracle では、次の項目でデータベース・キャラクタ・セットを使用します。 ■ SQL CHAR データ型(CHAR、VARCHAR2、CLOB および LONG)で格納されるデータ ■ 表名、列名および PL/SQL 変数などの識別子 ■ SQL と PL/SQL のソース・コードの入力と格納 データベースで使用される文字コード体系は、CREATE DATABASE 文の一部として定義され ます。データ・ディクショナリ内の列を含めて、すべての SQL CHAR データ型列(CHAR、 CLOB、VARCHAR2 および LONG)のデータは、データベース・キャラクタ・セットに格納さ れます。さらに、選択するデータベース・キャラクタ・セットによって、データベース内の オブジェクトに名前を指定できる文字が決定されます。SQL NCHAR データ型列(NCHAR、 NCLOB および NVARCHAR2)では、各国語キャラクタ・セットが使用されます。 注意 : データベース・キャラクタ・セットがマルチバイトの場合、CLOB データは UCS-2 との互換形式で格納されます。データベース・キャラク タ・セットがシングルバイトの場合、CLOB データはデータベース・キャ ラクタ・セットで格納されます。 データベースの作成後は、一部の例外を除いて、データベースを再作成せずにキャラクタ・ セットを変更することはできません。 データベース用の Oracle キャラクタ・セットを選択する場合は、次の項目について考慮す る必要があります。 ■ データベースでサポートする必要がある言語 ■ データベースで将来サポートが必要になる言語 ■ キャラクタ・セットがオペレーティング・システムで使用可能かどうか ■ クライアントで使用するキャラクタ・セット ■ そのキャラクタ・セットがアプリケーションで適切に処理されるかどうか ■ キャラクタ・セットがパフォーマンスに与える影響 ■ キャラクタ・セットに関連付けられている制限 Oracle キャラクタ・セットのリストは、A-8 ページの「キャラクタ・セット」を参照してく ださい。Oracle キャラクタ・セット名は、言語とそれが使用される地域に基づいています。 地域名が付いている一部のキャラクタ・セットは、リストに言語でも明示的に示されていま す。 2-14 Oracle Database グローバリゼーション・サポート・ガイド Oracle データベース・キャラクタ・セットの選択 あるキャラクタ・セットに含まれている文字を確認するには、次の方法があります。 ■ ■ 各国製品、国際的製品またはベンダー製品のドキュメントあるいは規格ドキュメントを チェックします。 Oracle Locale Builder を使用します。 この項の内容は、次のとおりです。 ■ 現在および将来の言語要件 ■ クライアントのオペレーティング・システムとアプリケーションの互換性 ■ クライアントとサーバーの間のキャラクタ・セット変換 ■ データベース・キャラクタ・セットの選択がパフォーマンスに与える影響 ■ データベース・キャラクタ・セットに関する制限事項 ■ 各国語キャラクタ・セットの選択 ■ サポート対象のデータ型の概要 関連項目 : ■ 6-4 ページ「UCS-2 エンコーディング」 ■ 2-18 ページ「各国語キャラクタ・セットの選択」 ■ 2-20 ページ「データベース作成後のキャラクタ・セットの変更」 ■ 付録 A「ロケール・データ」 ■ 第 13 章「ロケールのカスタマイズ」 現在および将来の言語要件 複数のキャラクタ・セットを使用して現在の言語要件を満たすことができる可能性がありま す。データベース・キャラクタ・セットの選択時には、将来の言語要件を考慮してくださ い。将来、追加の言語サポートが必要になると思われる場合は、後で異なるキャラクタ・ セットへの移行が必要にならないように、その言語をサポートしているキャラクタ・セット を選択します。 キャラクタ・セットの選択 2-15 Oracle データベース・キャラクタ・セットの選択 クライアントのオペレーティング・システムとアプリケーションの互換性 Oracle には独自のグローバリゼーション・アーキテクチャがあるため、データベース・キャ ラクタ・セットはオペレーティング・システムに依存しません。たとえば、英語版 Windows オペレーティング・システムで、日本語キャラクタ・セットを使用してデータ ベースを作成し、稼働させることができます。ただし、クライアントのオペレーティング・ システム上のアプリケーションがそのデータベースにアクセスするには、適切なフォントと 入力メソッドでデータベース・キャラクタ・セットをサポートできる必要があります。たと えば、英語版 Windows オペレーティング・システムでは、先に日本語フォントと入力メ ソッドをインストールしなければ、日本語データの挿入や取出しができません。または、日 本語データの挿入や取出しを行うために、日本語版オペレーティング・システムを使用して データベース・サーバーにリモートでアクセスする方法があります。 クライアントとサーバーの間のキャラクタ・セット変換 クライアントのオペレーティング・システム上のキャラクタ・セットと異なるデータベー ス・キャラクタ・セットを選択した場合、Oracle データベースでは、オペレーティング・シ ステムのキャラクタ・セットをデータベース・キャラクタ・セットに変換できます。キャラ クタ・セット変換には、次のデメリットがあります。 ■ データ消失の可能性 ■ オーバーヘッドの増加 キャラクタ・セット変換がデータ消失の原因になる場合があります。たとえば、キャラク タ・セット A をキャラクタ・セット B に変換する場合、変換先のキャラクタ・セット B に は、A と同じキャラクタ・セット・レパートリが含まれている必要があります。キャラク タ・セット B で使用できない文字は、置換文字に変換されます。この置換文字は、多くの場 合、疑問符や言語的に関連する文字で指定されます。たとえば、ä(ウムラウト付きの a) は、a に変換できます。分散環境の場合には、類似した文字レパートリを持つキャラクタ・ セットを使用してデータ消失を回避してください。 キャラクタ・セット変換では、データがクライアントに到達するまでに文字列が何度もバッ ファ間でコピーされる場合があります。データベース・キャラクタ・セットは、常に、クラ イアントのオペレーティング・システム固有のキャラクタ・セットと同等か、そのスーパー セットである必要があります。通常は、データベースにアクセスするクライアント・アプリ ケーションのキャラクタ・セットによって、最適なスーパーセットが決定します。 すべてのクライアント・アプリケーションが同じキャラクタ・セットを使用している場合 は、そのキャラクタ・セットが、通常、データベース・キャラクタ・セットとして最善の選 択肢です。複数のクライアント・アプリケーションが異なるキャラクタ・セットを使用して いる場合、データベース・キャラクタ・セットは、クライアントのすべてのキャラクタ・ セットのスーパーセットである必要があります。これによって、クライアント・キャラク タ・セットからデータベース・キャラクタ・セットへの変換時に、すべての文字が確実に受 け渡されます。 関連項目 : 第 11 章「キャラクタ・セットの移行」 2-16 Oracle Database グローバリゼーション・サポート・ガイド Oracle データベース・キャラクタ・セットの選択 データベース・キャラクタ・セットの選択がパフォーマンスに与える影響 最適なパフォーマンスのためには、変換が不要なキャラクタ・セットを選択し、使用言語に とって最も効率的なエンコーディングを使用してください。シングルバイト・キャラクタ・ セットは、パフォーマンスの点で、マルチバイト・キャラクタ・セットよりも優れており、 領域要件に関しても、シングルバイト・キャラクタ・セットが最も効率的です。ただし、シ ングルバイト・キャラクタ・セットには、サポートできる言語の種類に制限があります。 データベース・キャラクタ・セットに関する制限事項 ASCII ベースのキャラクタ・セットがサポートされているのは、ASCII ベースのプラット フォーム上のみです。同様に、EBCDIC ベースのキャラクタ・セットが使用できるのは、 EBCDIC ベースのプラットフォーム上のみです。 データベース・キャラクタ・セットは、SQL と PL/SQL ソース・コードの識別に使用しま す。このためには、データベース・キャラクタ・セットに、プラットフォーム固有の EBCDIC または 7 ビット ASCII のいずれかがサブセットとして含まれている必要がありま す。したがって、固定幅のマルチバイト・キャラクタ・セットをデータベース・キャラク タ・セットとして使用することはできません。現在、データベース・キャラクタ・セットと して使用できないのは AL16UTF16 キャラクタ・セットのみです。 名前を表すために使用するキャラクタ・セットに関する制限事項 表 2-5 に、名前を表すために使用できるキャラクタ・セットに関する制限事項を示します。 表 2-5 名前を表すために使用するキャラクタ・セットに関する制限事項 名前 シングル バイト 可変幅 コメント 列名 可能 可能 - スキーマ・オブジェクト 可能 可能 - コメント 可能 可能 - データベース・リンク名 可能 不可 - データベース名 可能 不可 - ファイル名(データ・ファイル、 ログ・ファイル、制御ファイル、 初期化パラメータ・ファイル) 可能 不可 - インスタンス名 可能 不可 - ディレクトリ名 可能 不可 - キーワード 可能 不可 英語 ASCII または EBCDIC 文字でのみ表現可能 です。 キャラクタ・セットの選択 2-17 Oracle データベース・キャラクタ・セットの選択 表 2-5 名前を表すために使用するキャラクタ・セットに関する制限事項(続き) 名前 シングル バイト 可変幅 コメント Recovery Manager ファイル名 可能 不可 - ロールバック・セグメント名 可能 不可 ROLLBACK_SEGMENTS パラメータは、NLS を サポートしていません。 ストアド・スクリプト名 可能 可能 - 表領域名 可能 不可 - LOB データ(LOB、BLOB、CLOB および NCLOB)などのサポート対象の文字列形式とキャ ラクタ・セットについては、2-19 ページの表 2-7 を参照してください。 各国語キャラクタ・セットの選択 各国語キャラクタ・セットとは、Unicode データベース・キャラクタ・セットがないデータ 各国語キャラクタ・セット ベースに Unicode の文字データを格納するための代替キャラクタ・セットです。その他、各 国語キャラクタ・セットを選択するには次の理由があります。 ■ 大量の文字処理操作には、別の文字コード体系のプロパティのほうが適している場合 ■ 各国語キャラクタ・セットでのプログラミングのほうが容易な場合 SQL NCHAR、NVARCHAR2 および NCLOB データ型は、Unicode データのみをサポートするよ うに再定義されています。UTF8 または AL16UTF16 キャラクタ・セットを使用できます。 デフォルトは AL16UTF16 です。 関連項目 : 第 6 章「Unicode を使用した多言語データベースのサポート」 サポート対象のデータ型の概要 表 2-6 に、様々なコード体系についてサポート対象のデータ型を示します。 表 2-6 コード体系のサポート対象の SQL データ型 データ型 シングルバイト マルチバイトの Unicode 以外 マルチバイトの Unicode CHAR 可能 可能 可能 VARCHAR2 可能 可能 可能 NCHAR 不可 不可 可能 NVARCHAR2 不可 不可 可能 BLOB 可能 可能 可能 2-18 Oracle Database グローバリゼーション・サポート・ガイド Oracle データベース・キャラクタ・セットの選択 表 2-6 コード体系のサポート対象の SQL データ型(続き) データ型 シングルバイト マルチバイトの Unicode 以外 マルチバイトの Unicode CLOB 可能 可能 可能 LONG 可能 可能 可能 NCLOB 不可 不可 可能 注意 : BLOB では、文字は一連のバイト順序として処理されます。データ は、NLS に関連した操作の対象にはなりません。 表 2-7 に、抽象データ型についてサポート対象の SQL データ型を示します。 表 2-7 SQL データ型のサポート対象の抽象データ型 抽象データ型 CHAR NCHAR BLOB CLOB NCLOB オブジェクト 可能 可能 可能 可能 可能 コレクション 可能 可能 可能 可能 可能 次のように、NCHAR 属性を使用して抽象データ型を作成できます。 SQL> CREATE TYPE tp1 AS OBJECT (a NCHAR(10)); Type created. SQL> CREATE TABLE t1 (a tp1); Table created. 関連項目 : オブジェクトとコレクションの詳細は、『Oracle Database ア プリケーション開発者ガイド - オブジェクト・リレーショナル機能』を参 照してください。 キャラクタ・セットの選択 2-19 データベース作成後のキャラクタ・セットの変更 データベース作成後のキャラクタ・セットの変更 データベースの作成後に、データベース・キャラクタ・セットの変更が必要になる場合があ ります。たとえば、使用しているデータベースでサポートする必要がある言語数が増加する 場合があります。ほとんどの場合は、全体エクスポートまたは全体インポートを行い、すべ てのデータを新しいキャラクタ・セットに正しく変換する必要があります。ただし、新しい キャラクタ・セットが現行のキャラクタ・セットの完全なスーパーセットである場合にかぎ り、ALTER DATABASE CHARACTER SET 文を使用して、データベース・キャラクタ・セット 内の変更を効率よく処理できます。 関連項目 : ■ ■ ■ 第 11 章「キャラクタ・セットの移行」 データのエクスポートとインポートの詳細は、 『Oracle Database アッ プグレード・ガイド』を参照してください。 ALTER DATABASE CHARACTER SET 文の詳細は、 『Oracle Database SQL リファレンス』を参照してください。 単一言語データベースの使用例 最も単純なデータベース構成の例は、クライアントとサーバーが同じ言語環境で稼働し、同 じキャラクタ・セットを使用している場合です。この単一言語の使用例には、高速応答とい う利点があります。これは、キャラクタ・セット変換に関連したオーバーヘッドが回避され るためです。図 2-3 に、同じキャラクタ・セットを使用しているデータベース・サーバーと クライアントを示します。日本語クライアントとサーバーの両方が、JA16EUC キャラクタ・ セットを使用しています。 図 2-3 単一言語データベースの使用例 また、複数層アーキテクチャも使用できます。図 2-4 に、データベース・サーバーとクライ アントの間にあるアプリケーション・サーバーを示します。アプリケーション・サーバーと データベース・サーバーは、単一言語の使用例と同じキャラクタ・セットを使用していま す。サーバー、アプリケーション・サーバーおよびクライアントは、JA16EUC キャラクタ・ セットを使用しています。 2-20 Oracle Database グローバリゼーション・サポート・ガイド 単一言語データベースの使用例 図 2-4 複数層の単一言語データベースの使用例 単一言語の使用例でのキャラクタ・セット変換 クライアント / サーバー環境では、クライアント・アプリケーションがサーバーと異なるプ ラットフォームにある場合や、プラットフォームで同じ文字コード体系が使用されていない 場合に、キャラクタ・セット変換が必要になります。クライアントとサーバーの間で受け渡 される文字データは、2 つのコード体系間で変換される必要があります。文字の変換は、 Oracle Net を介して、ユーザーが意識することなく自動的に実行されます。 任意の 2 つのキャラクタ・セット間で変換を行うことができます。図 2-5 に、サーバーと日 本語 JA16EUC キャラクタ・セットを使用している 1 つのクライアントを示します。他方の クライアントは、日本語 JA16SJIS キャラクタ・セットを使用しています。 図 2-5 キャラクタ・セットの変換 キャラクタ・セットの選択 2-21 単一言語データベースの使用例 ターゲットのキャラクタ・セットにソース・データにあるすべての文字がない場合は、置換 文字が使用されます。たとえば、サーバーでは US7ASCII を、ドイツ語クライアントでは WE8ISO8859P1 を使用している場合、ドイツ語の文字 ß は ? に置換され、ä は a に置換され ます。 置換文字は、キャラクタ・セットの定義の一部として、特定の文字に対して定義できます。 特定の置換文字を定義しないと、デフォルトの置換文字が使用されます。クライアント・ キャラクタ・セットからデータベース・キャラクタ・セットへの変換時に置換文字を使用し ないようにするには、サーバーのキャラクタ・セットが、クライアントのすべてのキャラク タ・セットのスーパーセットである必要があります。 図 2-6 に、データベース・キャラクタ・セットにクライアント・キャラクタ・セットのすべ ての文字が含まれていない場合に発生するデータ消失を示します。データベース・キャラク タ・セットは US7ASCII です。クライアントのキャラクタ・セットは WE8MSWIN1252 で、 クライアントの使用言語はドイツ語です。クライアントが ß を含む文字列を挿入すると、 データベースでは ß が ? に置換され、データが消失します。 図 2-6 文字変換中のデータ消失 ドイツ語データがサーバーに格納されると想定される場合は、データ消失と変換オーバー ヘッドを回避するために、サーバーとクライアントの両方で、ドイツ語文字をサポートする データベース・キャラクタ・セットを使用する必要があります。 2-22 Oracle Database グローバリゼーション・サポート・ガイド 多言語データベースの使用例 キャラクタ・セットの一方が可変幅マルチバイト・キャラクタ・セットの場合は、変換に よって著しいオーバーヘッドが生じる可能性があります。状況を慎重に評価した上でキャラ クタ・セットを選択し、変換をできるかぎり回避する必要があります。 多言語データベースの使用例 多言語サポートには、制限付きと無制限があります。この項の内容は、次のとおりです。 ■ 制限付き多言語サポート ■ 無制限多言語サポート 制限付き多言語サポート 一部のキャラクタ・セットでは、関連する記述法やスクリプトがあるため、多言語がサポー トされます。たとえば、Oracle キャラクタ・セット WE8ISO8859P1 は、次の西ヨーロッパ 諸国の言語をサポートしています。 カタロニア語 デンマーク語 オランダ語 英語 フィンランド語 フランス語 ドイツ語 アイスランド語 イタリア語 ノルウェー語 ポルトガル語 スペイン語 スウェーデン語 これらの言語は、いずれもラテン語ベースの記述文字を使用します。 言語グループをサポートするキャラクタ・セットを使用する場合、データベースは制限付き 制限付き 多言語サポート機能を持つことになります。 多言語サポート 図 2-7 に、Oracle キャラクタ・セット WE8ISO8850P1 を使用する西ヨーロッパ言語のサー バー、サーバーと同じキャラクタ・セットを使用するフランス語クライアントおよび WE8DEC キャラクタ・セットを使用するドイツ語クライアントを示します。ドイツ語クラ イアントは、サーバーと異なるキャラクタ・セットを使用しているため、文字変換が必要で す。 キャラクタ・セットの選択 2-23 多言語データベースの使用例 図 2-7 制限付き多言語サポート 無制限多言語サポート 無制限多言語サポートが必要な場合は、サーバーのデータベース・キャラクタ・セットに Unicode などのユニバーサル・キャラクタ・セットを使用します。Unicode には、主に次の 2 つのコード体系があります。 ■ UTF-16: 各文字は長さ 2 バイトまたは 4 バイトです。 ■ UTF-8: 各文字の格納には 1 ~ 4 バイト必要です。 データベースでは、データベース・キャラクタ・セットとして UTF-8 が、各国語キャラク タ・セットとして UTF-8 と UTF-16 の両方がサポートされています。 UTF-8 のデータベースとシングルバイト・キャラクタ・セットとの間でのキャラクタ・セッ ト変換では、ごくわずかなオーバーヘッドが生じます。 UTF-8 とマルチバイト・キャラクタ・セットとの間での変換では、多少のオーバーヘッドが 生じます。変換によるデータ消失はありませんが、これには次の例外があります。 ■ ■ 一部のマルチバイト・キャラクタ・セットは、UTF-8 との間のキャラクタ・セット変換 で、ユーザー定義文字をサポートしていません。 一部の Unicode 文字は、他のキャラクタ・セットで複数文字にマップされます。たとえ ば、1 つの Unicode 文字は JA16SJIS キャラクタ・セットの 3 文字にマップされます。こ れは、ラウンドトリップ変換でオリジナルの JA16SJIS 文字に変換されない場合があるこ とを意味します。 2-24 Oracle Database グローバリゼーション・サポート・ガイド 多言語データベースの使用例 図 2-8 に、Unicode UTF-8 キャラクタ・セットに基づく Oracle キャラクタ・セット AL32UTF8 を使用するサーバーを示します。 図 2-8 クライアント / サーバー構成での無制限多言語サポートの使用例 次の 4 つのクライアントがあるとします。 ■ Oracle キャラクタ・セット WE8ISO8859P1 を使用するフランス語クライアント ■ WE8DEC キャラクタ・セットを使用するドイツ語クライアント ■ JA16EUC キャラクタ・セットを使用する日本語クライアント ■ JA16SJIS キャラクタ・セットを使用する日本語クライアント 各クライアントとサーバーの間で文字変換が発生しますが、AL32UTF8 がユニバーサル・ キャラクタ・セットであるためデータ消失は生じません。ドイツ語クライアントが日本語ク キャラクタ・セットの選択 2-25 多言語データベースの使用例 ライアントの 1 つからデータを取り出そうとすると、キャラクタ・セット変換中にデータに 含まれる日本語文字がすべて消失します。 図 2-9 に、複数層構成での Unicode ソリューションを示します。 図 2-9 複数層構成での複数層の無制限多言語サポートの使用例 データベース、アプリケーション・サーバーおよび各クライアントは、AL32UTF8 キャラク タ・セットを使用しています。このため、クライアントがフランス語、ドイツ語および日本 語であっても、文字変換を行う必要はありません。 関連項目 : 第 6 章「Unicode を使用した多言語データベースのサポート」 2-26 Oracle Database グローバリゼーション・サポート・ガイド 3 グローバリゼーション・サポート環境の設定 この章では、グローバリゼーション・サポート環境の設定方法について説明します。この章 の内容は、次のとおりです。 ■ NLS パラメータの設定 ■ 環境変数 NLS_LANG を使用したロケールの選択 ■ NLS データベース・パラメータ ■ 言語および地域のパラメータ ■ 日付および時間を指定するパラメータ ■ カレンダ定義 ■ 数値パラメータとリスト・パラメータ ■ 通貨パラメータ ■ 言語ソート・パラメータ ■ キャラクタ・セット変換パラメータ ■ 長さセマンティクス グローバリゼーション・サポート環境の設定 3-1 NLS パラメータの設定 NLS パラメータの設定 NLS パラメータによって、クライアントとサーバーの両方でのロケール固有の動作が決定し ます。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-2 Oracle Database グローバリゼーション・サポート・ガイド NLS パラメータの設定 表 3-1 に、NLS パラメータの各種設定方法の優先順位を示します。優先順位の低い設定は、 優先順位の高い設定によってオーバーライドされます。たとえば、デフォルト値の優先順位 が最も低く、他のすべての方法でオーバーライドされます。 表 3-1 NLS パラメータの設定方法とその優先順位 優先順位 方法 1(最も高い優先順位) SQL 関数での明示的な設定 2 ALTER SESSION 文による設定 3 環境変数としての設定 4 初期化パラメータ・ファイル内での指定 5 デフォルト 表 3-2 に、使用可能な NLS パラメータを示します。SQL 関数の NLS パラメータを指定する には特定の関数を使用する必要があるため、この表には SQL 関数の有効範囲は示されてい ません。 表 3-2 NLS パラメータ 有効範囲 : デフォルト I = 初期化パラメータ・ファイル E= 環境変数 A = ALTER SESSION パラメータ 説明 NLS_CALENDAR 暦法 NLS_COMP SQL、PL/SQL 演算子の比較 BINARY I、E、A NLS_CREDIT 貸方の会計記号 NLS_TERRITORY から導出 E NLS_CURRENCY 各国通貨記号 NLS_TERRITORY から導出 I、E、A NLS_DATE_FORMAT 日付書式 NLS_TERRITORY から導出 I、E、A NLS_DATE_LANGUAGE 曜日名と月名に使用する言語 NLS_LANGUAGE から導出 I、E、A NLS_DEBIT 借方の会計記号 NLS_TERRITORY から導出 E NLS_ISO_CURRENCY ISO 国際通貨記号 NLS_TERRITORY から導出 I、E、A Gregorian (グレゴリオ暦) I、E、A グローバリゼーション・サポート環境の設定 3-3 NLS パラメータの設定 表 3-2 NLS パラメータ(続き) 有効範囲 : I = 初期化パラメータ・ファイル E= 環境変数 A = ALTER SESSION パラメータ 説明 デフォルト NLS_LANG 言語、地域、キャラクタ・ セット AMERICAN_ AMERICA. US7ASCII E NLS_LANGUAGE 言語 NLS_LANG から導出 I、A NLS_LENGTH_SEMANTICS 文字列の処理方法 BYTE I、A NLS_LIST_SEPARATOR リスト内項目の区切り文字 NLS_TERRITORY から導出 E NLS_MONETARY_ CHARACTERS ドルとセント(または相当する NLS_TERRITORY 通貨)に使用する通貨記号 から導出 E NLS_NCHAR_CONV_EXCP 文字列型変換時のデータ消失の FALSE レポート I、A 関連項目 : 3-5 ページの「環 境変数 NLS_LANG を使用し たロケールの選択」 NLS_NUMERIC_CHARACTERS 小数点文字とグループ・ セパレータ NLS_TERRITORY から導出 I、E、A NLS_SORT 文字のソート基準 NLS_LANGUAGE から導出 I、E、A NLS_TERRITORY 地域 NLS_LANG から導出 I、A NLS_TIMESTAMP_FORMAT タイムスタンプ NLS_TERRITORY から導出 I、E、A NLS_TIMESTAMP_TZ_ FORMAT タイム・ゾーン付きのタイムス NLS_TERRITORY タンプ から導出 I、E、A NLS_DUAL_CURRENCY 第 2 通貨記号 I、E、A NLS_TERRITORY から導出 3-4 Oracle Database グローバリゼーション・サポート・ガイド 環境変数 NLS_LANG を使用したロケールの選択 環境変数 NLS_LANG を使用したロケールの選択 ロケールとは、システムやプログラムを実行する言語的および文化的な環境のことです。 ロケール Oracle ソフトウェアのロケール動作を指定する最も簡単な方法は、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 パラメータの各コンポーネントによって、グローバリゼーション・サポート機能 のサブセットの操作が制御されます。 ■ language Oracle のメッセージ、ソート、曜日名および月名に使用する言語などの規則を指定しま す。各サポート対象言語には、AMERICAN、FRENCH または GERMAN などの一意の名前 が付いています。language の引数によって、territory および charset の引数にデフォル ト値が指定されます。language を指定しない場合、デフォルト値は AMERICAN に設定 されます。 ■ territory デフォルトの日付、通貨単位および数値書式などの規則を指定します。各サポート対象 地域には、AMERICA、FRANCE または CANADA などの一意の名前が付いています。 territory を指定しない場合、値は language の値から導出されます。 ■ charset クライアント・アプリケーションが使用するキャラクタ・セット(通常はユーザーの端 末のキャラクタ・セットまたは OS のキャラクタ・セットに対応する Oracle のキャラク タ・セット)を指定します。サポート対象の各キャラクタ・セットには、US7ASCII、 WE8ISO8859P1、WE8DEC、WE8MSWIN1252 または JA16EUC などの一意の頭字語が付 いています。各言語には、その言語に対応したデフォルトのキャラクタ・セットがあり ます。 グローバリゼーション・サポート環境の設定 3-5 環境変数 NLS_LANG を使用したロケールの選択 注意 : 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 に使用すると日本語データを格納および表示できません。 これ以降の内容は、次のとおりです。 ■ NLS_LANG の値の指定 ■ 言語指定と地域指定のオーバーライド ■ ロケールのバリアント 関連項目 : ■ ■ サポート対象のすべての言語、地域およびキャラクタ・セットのリス トは、付録 A「ロケール・データ」を参照してください。 プラットフォームに必要な追加のグローバリゼーション設定の詳細 は、オペレーティング・システムのマニュアルを参照してください。 3-6 Oracle Database グローバリゼーション・サポート・ガイド 環境変数 NLS_LANG を使用したロケールの選択 NLS_LANG の値の指定 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 ------------------------Sciarra Urman Popp HIRE_DATE SALARY --------- ---------30-SEP-97 962.5 07-MAR-98 975 07-DEC-99 862.5 例 3-2 NLS_LANG を French_France.WE8ISO8859P1 に設定する場合 言語が FRENCH、地域が FRANCE、Oracle キャラクタ・セットが WE8ISO8859P1 となるよ うに、NLS_LANG を設定します。 % setenv NLS_LANG French_France.WE8ISO8859P1 例 3-1 に示した問合せでは、次の出力が戻されます。 LAST_NAME ------------------------Sciarra Urman Popp HIRE_DAT SALARY -------- ---------30/09/97 962,5 07/03/98 975 07/12/99 862,5 日付書式と数値書式が変更されていることに注意してください。基礎となるデータは同じで あるため、数値に変更はありません。 グローバリゼーション・サポート環境の設定 3-7 環境変数 NLS_LANG を使用したロケールの選択 言語指定と地域指定のオーバーライド NLS_LANG パラメータは、サーバー・セッション(SQL コマンドの実行など)とクライアン ト・アプリケーション(Oracle のツール製品での書式設定表示など)の両方で使用する言語 と地域の環境を設定します。このパラメータを使用することで、データベースとクライアン ト・アプリケーションの言語環境が自動的に同じになります。 NLS_LANG パラメータの language コンポーネントと territory コンポーネントによって、他 の詳細な NLS パラメータ(日付書式、数字および言語ソートなど)のデフォルト値が決定 されます。NLS_LANG パラメータがすでに設定されている場合は、これらの詳細パラメータ をそれぞれクライアント環境で設定してデフォルト値をオーバーライドできます。 NLS_LANG パラメータを設定しない場合、サーバー・セッション環境は、初期化パラメー タ・ファイルの NLS_LANGUAGE、NLS_TERRRITORY および他の NLS インスタンスのパラ メータの値によって初期化された状態のままです。これらのパラメータを変更して、インス タンスを再起動すると、デフォルト値を変更できます。 セッション中に NLS 環境の動的な変更が必要な場合があります。その場合は、ALTER SESSION 文を使用して NLS_LANGUAGE、NLS_TERRITORY および他の NLS パラメータを 変更できます。 注意 : クライアント・キャラクタ・セットの設定は、ALTER SESSION 文では変更できません。 ALTER SESSION 文が変更するのは、セッション環境のみです。ローカル・クライアントの NLS 環境は、クライアントが新しい設定を明示的に取得してローカル環境を変更しないかぎ り、変更されません。 関連項目 : ■ ■ 3-19 ページ「セッション中の NLS_LANGUAGE および NLS_TERRITORY のデフォルト値のオーバーライド」 『Oracle Database SQL リファレンス』 3-8 Oracle Database グローバリゼーション・サポート・ガイド 環境変数 NLS_LANG を使用したロケールの選択 ロケールのバリアント Oracle Database 10g リリース 1(10.1)までの Oracle では、言語と地域が別々に定義されて いました。このため、地域定義はユーザーの言語設定から独立していました。Oracle Database 10g リリース 1(10.1)では、一部の地域にユーザーの言語設定に基づいて異なる 日付、時刻、数値および通貨書式を使用できます。この種の言語依存の地域定義をロケール のバリアントと呼びます。 バリアントを正常に動作させるには、NLS_TERRITORY および NLS_LANGUAGE の両方を指 定する必要があります。たとえば、NLS_LANGUAGE として DUTCH を指定した場合に NLS_TERRITORY を設定しないと、地域の動作は THE NETHERLANDS となります。 NLS_TERRITORY を BELGIUM に設定した場合に、NLS_LANGUAGE を設定しないか DUTCH に設定すると、DUTCH の動作に基づく日付、時刻、数値および通貨書式が使用されます。 これに対して、NLS_TERRITORY を BELGIUM に設定して NLS_LANGUAGE を FRENCH に設 定すると、FRENCH の動作に基づく日付、時刻、数値および通貨書式が使用されます。 表 3-3 に、バリアントをサポートするように拡張されている地域を示します。この表には、 地域のデフォルト動作が示されています。デフォルト動作となるのは、NLS_LANGUAGE が 指定されていない場合です。 表 3-3 Oracle のロケールのバリアント Oracle の地域 Oracle の言語 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 グローバリゼーション・サポート環境の設定 3-9 環境変数 NLS_LANG を使用したロケールの選択 表 3-3 Oracle のロケールのバリアント(続き) Oracle の地域 Oracle の言語 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-10 Oracle Database グローバリゼーション・サポート・ガイド NLS データベース・パラメータ NLS_LANG 設定とデータベース・キャラクタ・セットを一致させる必要が あるかどうか NLS_LANG のキャラクタ・セットには、クライアントのオペレーティング・システムのキャ ラクタ・セットの設定を反映させる必要があります。たとえば、データベース・キャラク タ・セットが AL32UTF8 で、クライアントのオペレーティング・システムが Windows の場 合、UTF8 WIN32 クライアントはないため、NLS_LANG パラメータではクライアント・キャ ラクタ・セットとして AL32UTF8 を設定しないでください。かわりに、NLS_LANG の設定に クライアントのコード・ページを反映させる必要があります。たとえば、英語版 Windows クライアントでは、コード・ページは 1252 です。NLS_LANG の適切な設定は、AMERICAN_ AMERICA.WE8MSWIN1252 です。 NLS_LANG を適切に設定すると、クライアント・オペレーティング・システムのキャラク タ・セットからデータベース・キャラクタ・セットへと適切に変換できます。これらの設定 が同じときは、送受信されるデータはデータベース・キャラクタ・セットと同一のキャラク タ・セットでエンコードされているとみなされ、妥当性チェックや変換は保証されません。 このため、クライアントのコード・ページとデータベース・キャラクタ・セットが異なって いて、変換が必要な場合は、データが破損する可能性があります。 関連項目 : Windows で NLS_LANG パラメータに一般に使用できる値の 詳細は、 『Oracle Database インストレーション・ガイド for Windows』を 参照してください。 NLS データベース・パラメータ CREATE DATABASE 文の実行中に新しいデータベースが作成されると、NLS 関連のデータ ベース構成が設定されます。現行の NLS インスタンス・パラメータは、データベース・ キャラクタ・セットおよび各国語キャラクタ・セットとともにデータ・ディクショナリに格 納されます。NLS インスタンス・パラメータは、インスタンスの起動時に初期化パラメー タ・ファイルから読み込まれます。 NLS パラメータの値は、次のいずれかを使用して検索できます。 ■ NLS データ・ディクショナリ・ビュー ■ NLS 動的パフォーマンス・ビュー ■ OCINlsGetInfo() 関数 グローバリゼーション・サポート環境の設定 3-11 NLS データベース・パラメータ NLS データ・ディクショナリ・ビュー アプリケーションでは、次のデータ・ディクショナリ・ビューに問い合せて、セッション、 インスタンスおよびデータベースの NLS パラメータをチェックできます。 ■ ■ ■ NLS_SESSION_PARAMETERS には、このビューに問合せ中のセッションの NLS パラ メータとその値が表示されます。キャラクタ・セットに関する情報は表示されません。 NLS_INSTANCE_PARAMETERS には、明示的に設定されている現行の NLS インスタン ス・パラメータとその値が表示されます。 NLS_DATABASE_PARAMETERS には、データベースの 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 リファレンス』 OCINlsGetInfo() 関数 ユーザー・アプリケーションでは、OCINlsGetInfo() 関数を使用して、クライアントの NLS 設定を問い合せることができます。 関連項目 : OCINlsGetInfo() 関数の詳細は、10-3 ページの「OCI での ロケール情報の取得」を参照してください。 3-12 Oracle Database グローバリゼーション・サポート・ガイド 言語および地域のパラメータ 言語および地域のパラメータ この項では、次のパラメータについて説明します。 ■ NLS_LANGUAGE ■ NLS_TERRITORY NLS_LANGUAGE プロパティ 説明 パラメータ・タイプ 文字列 パラメータの有効範囲 初期化パラメータおよび 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 グローバリゼーション・サポート環境の設定 3-13 言語および地域のパラメータ 言語がフランス語の場合は、次のサーバー・メッセージが表示されます。 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 マニュアルを参照してください。 メッセージとテキストはすべて同じ言語にする必要があります。たとえば、Oracle Developer アプリケーションの実行時にユーザーが参照するメッセージとボイラープレー ト・テキストは、次の 3 つのソースから導出されます。 ■ サーバーからのメッセージ ■ Oracle Forms によって生成されたメッセージとボイラープレート・テキスト ■ アプリケーションによって生成されたメッセージとボイラープレート・テキスト 3-14 Oracle Database グローバリゼーション・サポート・ガイド 言語および地域のパラメータ 最初の 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 ------------------------Sciarra Urman Popp HIRE_DATE SALARY --------- ---------30-SET-97 962.5 07-MAR-98 975 07-DIC-99 862.5 月名の略称にイタリア語が使用されていることに注意してください。 関連項目 : ALTER SESSION 文の使用方法の詳細は、3-19 ページの 「セッション中の NLS_LANGUAGE および NLS_TERRITORY のデフォル ト値のオーバーライド」を参照してください。 例 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 ------------------------Sciarra Urman Popp HIRE_DATE SALARY --------- ---------30-SEP-97 962.5 07-MÄR-98 975 07-DEZ-99 862.5 月名の略称の言語が変更されていることに注意してください。 グローバリゼーション・サポート環境の設定 3-15 言語および地域のパラメータ NLS_TERRITORY プロパティ 説明 パラメータ・タイプ 文字列 パラメータの有効範囲 初期化パラメータおよび 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 セッション・ パラメータは、新しい地域のデフォルト値に再設定されます。 3-16 Oracle Database グローバリゼーション・サポート・ガイド 言語および地域のパラメータ セッション中に地域をフランスに変更するには、次の 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 通貨記号が $ から € に変更されていることに注意してください。基礎となるデータは同じで あるため、数値に変更はありません。 関連項目 : ALTER SESSION 文の使用方法の詳細は、3-19 ページの 「セッション中の NLS_LANGUAGE および NLS_TERRITORY のデフォル ト値のオーバーライド」を参照してください。 グローバリゼーション・サポート環境の設定 3-17 言語および地域のパラメータ 例 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 地域がドイツからアメリカに変更されたため、通貨記号が € から $ に変更されていることに 注意してください。 3-18 Oracle Database グローバリゼーション・サポート・ガイド 言語および地域のパラメータ セッション中の NLS_LANGUAGE および NLS_TERRITORY のデフォルト値 のオーバーライド 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 ------------------------Sciarra Urman Popp HIRE_DATE SALARY --------- ---------30-SET-97 962,5 07-MAR-98 975 07-DIC-99 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; グローバリゼーション・サポート環境の設定 3-19 日付および時間を指定するパラメータ 出力は次のようになります。 LAST_NAME ------------------------Sciarra Urman Popp HIRE_DATE SALARY --------- ---------30.SEP.97 962.5 07.MÄR.98 975 07.DEZ.99 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 では、日付と時刻の表示を制御できます。この項の内容は、次のとおりです。 ■ 日付書式 ■ 時刻書式 日付書式 表 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 3-20 Oracle Database グローバリゼーション・サポート・ガイド 日付および時間を指定するパラメータ この項では、次のパラメータについて説明します。 ■ NLS_DATE_FORMAT ■ NLS_DATE_LANGUAGE NLS_DATE_FORMAT プロパティ 説明 パラメータ・タイプ 文字列 パラメータの有効範囲 初期化パラメータ、環境変数および 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 グローバリゼーション・サポート環境の設定 3-21 日付および時間を指定するパラメータ 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 リファレンス』を参照してくださ い。 NLS_DATE_LANGUAGE プロパティ 説明 パラメータ・タイプ 文字列 パラメータの有効範囲 初期化パラメータ、環境変数、ALTER SESSION および SQL 関数 デフォルト値 NLS_LANGUAGE から導出 値の範囲 有効な任意の言語名 NLS_DATE_LANGUAGE パラメータは、TO_CHAR および TO_DATE 関数で生成される曜日名 と月名の言語を指定します。NLS_DATE_LANGUAGE によって、NLS_LANGUAGE で暗黙的に 指定された言語がオーバーライドされます。NLS_DATE_LANGUAGE の構文は、 NLS_LANGUAGE パラメータの構文と同じで、サポート対象言語すべてが有効値です。 3-22 Oracle Database グローバリゼーション・サポート・ガイド 日付および時間を指定するパラメータ また、NLS_DATE_LANGUAGE によって、次の表記に使用する言語が決定されます。 ■ TO_CHAR および TO_DATE 関数で戻される月名と曜日名の略称 ■ デフォルトの日付書式(NLS_DATE_FORMAT)で使用される月名と曜日名の略称 ■ AM、PM、AD および BC の略称 例 3-12 NLS_DATE_LANGUAGE=FRENCH、月名および曜日名 、月名および曜日名 日付の言語をフランス語に設定します。 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 Dec 2001 グローバリゼーション・サポート環境の設定 3-23 日付および時間を指定するパラメータ 例 3-14 NLS_DATE_LANGUAGE=FRENCH、デフォルトの日付書式 、デフォルトの日付書式 デフォルトの日付書式では、NLS_DATE_LANGUAGE によって決定された月名の略称が使用 されます。たとえば、デフォルトの日付書式が DD-MON-YYYY の場合、日付は次のように挿 入されます。 INSERT INTO tablename VALUES ('12-Fév-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 この項では、次のパラメータについて説明します。 ■ NLS_TIMESTAMP_FORMAT ■ NLS_TIMESTAMP_TZ_FORMAT 関連項目 : 第 4 章「日時データ型とタイム・ゾーン・サポート」 NLS_TIMESTAMP_FORMAT プロパティ 説明 パラメータ・タイプ 文字列 パラメータの有効範囲 初期化パラメータ、環境変数および ALTER SESSION デフォルト値 NLS_TERRITORY から導出 値の範囲 有効な日時書式マスク 3-24 Oracle Database グローバリゼーション・サポート・ガイド 日付および時間を指定するパラメータ 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') --------------------------------------------------------------------------11-NOV-00 01:00:00.336000000 NLS_TIMESTAMP_FORMAT の値を指定するには、その値を初期化パラメータ・ファイルに設 定します。設定した値は、クライアントのクライアント環境変数として指定できます。 また、次の方法で NLS_TIMESTAMP_FORMAT の値を変更することもできます。 ■ 初期化パラメータ・ファイル内で値を変更してから、インスタンスを再起動します。 ■ ALTER SESSION SET NLS_TIMESTAMP_FORMAT 文を使用します。 関連項目 : TO_TIMESTAMP 関数と ALTER SESSION 文の詳細は、 『Oracle Database SQL リファレンス』を参照してください。 NLS_TIMESTAMP_TZ_FORMAT プロパティ 説明 パラメータ・タイプ 文字列 パラメータの有効範囲 初期化パラメータ、環境変数および ALTER SESSION デフォルト値 NLS_TERRITORY から導出 値の範囲 有効な日時書式マスク NLS_TIMESTAMP_TZ_FORMAT は、TIMESTAMP および TIMESTAMP WITH LOCAL TIME ZONE データ型のデフォルトの日付書式を定義します。このパラメータは、TO_CHAR および TO_TIMESTAMP_TZ 関数で使用します。 NLS_TIMESTAMP_TZ_FORMAT の値を指定するには、その値を初期化パラメータ・ファイル に設定します。設定した値は、クライアントのクライアント環境変数として指定できます。 グローバリゼーション・サポート環境の設定 3-25 カレンダ定義 例 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 --------------------------------------------------------------------------20-AUG-00 05:00:00.550000000 AM AMERICA/LOS_ANGELES NLS_TIMESTAMP_TZ_FORMAT の値は次の方法で変更できます。 ■ 初期化パラメータ・ファイル内で値を変更してから、インスタンスを再起動します。 ■ ALTER SESSION 文を使用します。 関連項目 : ■ ■ TO_TIMESTAMP_TZ 関数と ALTER SESSION 文の詳細は、『Oracle Database SQL リファレンス』を参照してください。 タイム・ゾーンの詳細は、4-19 ページの「タイム・ゾーン・ファイル の選択」を参照してください。 カレンダ定義 この項の内容は、次のとおりです。 ■ カレンダ書式 ■ NLS_CALENDAR 3-26 Oracle Database グローバリゼーション・サポート・ガイド カレンダ定義 カレンダ書式 次のカレンダ情報が地域別に格納されます。 ■ 週の最初の曜日 ■ 年の最初の暦週 ■ 1 年の日数と月数 ■ 紀元の年 週の最初の曜日 一部の文化では、日曜日を最初の曜日とみなしています。また、月曜日を最初の曜日とみな す文化もあります。ドイツのカレンダは、表 3-6 に示すように月曜日から始まります。 表 3-6 ドイツのカレンダの例 : 1998 年 3 月 Mo Di Mi Do Fr Sa So - - - - - - 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-16 ページ「NLS_TERRITORY」 年の最初の暦週 一部の国では、週番号を使用してスケジューリング、計画および会計処理を行います。 Oracle では、この規則をサポートしています。ISO 規格では、暦年の週番号とは異なる週番 号を使用できます。たとえば、1988 年 1 月 1 日は、1987 年の ISO 週番号 53 になります。 ISO の週は、常に月曜日に始まって日曜日に終わります。 ■ ■ 1 月 1 日が金曜日、土曜日または日曜日の場合、1 月 1 日を含む ISO の週は、その週の大 半の日が前年に属するため、前年の最後の週になります。 1 月 1 日が月曜日、火曜日、水曜日または木曜日の場合は、1 月 1 日を含む ISO の週は、 その週の大半の日が新しい年に属するため、新しい年の最初の週になります。 ISO 規格をサポートするために、Oracle には IW 日付書式要素が用意されています。この書 式要素は ISO 週番号を戻します。 グローバリゼーション・サポート環境の設定 3-27 カレンダ定義 表 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 パラメータによって決定されます。 関連項目 : 3-16 ページ「NLS_TERRITORY」 3-28 Oracle Database グローバリゼーション・サポート・ガイド カレンダ定義 1 年の日数と月数 Oracle では、デフォルトのグレゴリオ暦の他に、次の 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 パラメータで指定します。 関連項目 : 3-29 ページ「NLS_CALENDAR」 紀元の年 イスラム暦は、ヒジュラ紀元の年から始まります。 日本の元号暦は、天皇が即位した最初の年から始まります。たとえば、1998 年は平成 10 年 になります。ただし、日本では、グレゴリオ暦も広く理解されているので、1998 年を表現す るために 98 年と平成 10 年の両方が使用されます。 NLS_CALENDAR プロパティ 説明 パラメータ・タイプ 文字列 パラメータの有効範囲 初期化パラメータ、環境変数、ALTER SESSION および SQL 関数 デフォルト値 Gregorian(グレゴリオ暦) 値の範囲 有効なカレンダ書式名 世界中で様々な暦法が使用されています。NLS_CALENDAR によって、Oracle で使用する暦 法が指定されます。 グローバリゼーション・サポート環境の設定 3-29 カレンダ定義 NLS_CALENDAR パラメータには、次の値のいずれかを指定できます。 ■ Arabic Hijrah(イスラム歴) ■ English Hijrah(英語版イスラム歴) ■ Gregorian(グレゴリオ暦) ■ Japanese Imperial(日本の元号暦) ■ Persian(ペルシャ暦) ■ ROC Official(台湾暦) ■ Thai Buddha(タイ仏教暦) 関連項目 : 暦法、そのデフォルトの日付書式および日付表示に使用され るキャラクタ・セットのリストは、付録 A「ロケール・データ」を参照し てください。 例 3-17 NLS_CALENDAR='English Hijrah' NLS_CALENDAR を English Hijrah に設定します。 SQL> ALTER SESSION SET NLS_CALENDAR='English Hijrah'; SELECT 文を入力して SYSDATE を表示します。 SELECT SYSDATE FROM dual; 出力は次のようになります。 SYSDATE -------------------24 Ramadan 1422 3-30 Oracle Database グローバリゼーション・サポート・ガイド 数値パラメータとリスト・パラメータ 数値パラメータとリスト・パラメータ この項の内容は、次のとおりです。 ■ 数値書式 ■ NLS_NUMERIC_CHARACTERS ■ NLS_LIST_SEPARATOR 数値書式 データベースでは、数字列を正確に解釈するために、各セッションで使用される数値書式設 定の規則を認識している必要があります。たとえば、数値の入力時に小数点文字としてピリ オドまたはカンマのどちらを使用するか(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 パラメータでオーバーライドできます。 関連項目 : 3-16 ページ「NLS_TERRITORY」 グローバリゼーション・サポート環境の設定 3-31 数値パラメータとリスト・パラメータ 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 3-32 Oracle Database グローバリゼーション・サポート・ガイド 数値パラメータとリスト・パラメータ NLS_NUMERIC_CHARACTERS のデフォルト値は次の方法で変更できます。 ■ ■ 初期化パラメータ・ファイルで NLS_NUMERIC_CHARACTERS の値を変更してから、イ ンスタンスを再起動します。 このパラメータの値をセッション中に変更するには、ALTER SESSION 文を使用します。 関連項目 : ALTER SESSION 文の詳細は、 『Oracle Database SQL リファ レンス』を参照してください。 NLS_LIST_SEPARATOR プロパティ 説明 パラメータ・タイプ 文字列 パラメータの有効範囲 環境変数 デフォルト値 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-33 通貨パラメータ 通貨パラメータ この項の内容は、次のとおりです。 ■ 通貨書式 ■ NLS_CURRENCY ■ NLS_ISO_CURRENCY ■ NLS_DUAL_CURRENCY ■ NLS_MONETARY_CHARACTERS ■ NLS_CREDIT ■ NLS_DEBIT 通貨書式 世界中で様々な通貨書式が使用されています。表 3-10 に、標準的な通貨書式の一部を示しま す。 表 3-10 通貨書式の例 国名 例 エストニア 1 234,56 kr ドイツ 1.234,56 € 日本 ¥1,234.56 英国 £1,234.56 米国 $1,234.56 3-34 Oracle Database グローバリゼーション・サポート・ガイド 通貨パラメータ NLS_CURRENCY プロパティ 説明 パラメータ・タイプ 文字列 パラメータの有効範囲 初期化パラメータ、環境変数、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 文を使用します。 関連項目 : ALTER SESSION 文の詳細は、 『Oracle Database SQL リファ レンス』を参照してください。 グローバリゼーション・サポート環境の設定 3-35 通貨パラメータ NLS_ISO_CURRENCY プロパティ 説明 パラメータ・タイプ 文字列 パラメータの有効範囲 初期化パラメータ、環境変数、ALTER SESSION および SQL 関数 デフォルト値 NLS_TERRITORY から導出 値の範囲 有効な任意の文字列 NLS_ISO_CURRENCY では、C 数値書式マスクで戻される文字列の ISO 通貨記号を指定しま す。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-36 Oracle Database グローバリゼーション・サポート・ガイド 通貨パラメータ 例 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 NLS_ISO_CURRENCY のデフォルト値は次の方法で変更できます。 ■ 初期化パラメータ・ファイル内で値を変更してから、インスタンスを再起動します。 ■ ALTER SESSION 文を使用します。 関連項目 : ALTER SESSION 文の詳細は、 『Oracle Database SQL リファ レンス』を参照してください。 グローバリゼーション・サポート環境の設定 3-37 通貨パラメータ NLS_DUAL_CURRENCY プロパティ 説明 パラメータ・タイプ 文字列 パラメータの有効範囲 初期化パラメータ、環境変数、ALTER SESSION および SQL 関数 デフォルト値 NLS_TERRITORY から導出 値の範囲 有効な任意の記号 NLS_DUAL_CURRENCY を使用すると、NLS_TERRITORY で暗黙的に定義されたデフォルト の第 2 通貨記号がオーバーライドされます。 NLS_DUAL_CURRENCY は、ユーロ移行期間中にユーロ通貨記号をサポートするために導入 されました。表 3-12 に、ユーロ記号をサポートしているキャラクタ・セットを示します。 表 3-12 ユーロ記号をサポートしているキャラクタ・セット キャラクタ・セット名 説明 ユーロ記号の 16 進コード値 D8EBCDIC1141 EBCDIC コード・ページ 1141 8 ビット・ドイツ語(オーストリア) 9F DK8EBCDIC1142 EBCDIC コード・ページ 1142 8 ビット・デンマーク語 5A S8EBCDIC1143 EBCDIC コード・ページ 1143 8 ビット・スウェーデン語 5A I8EBCDIC1144 EBCDIC コード・ページ 1144 8 ビット・イタリア語 9F F8EBCDIC1147 EBCDIC コード・ページ 1147 8 ビット・フランス語 9F WE8PC858 IBM-PC コード・ページ 858 8 ビット西ヨーロッパ語 DF WE8ISO8859P15 ISO 8859-15 西ヨーロッパ語 A4 EE8MSWIN1250 MS Windows コード・ページ 1250 8 ビット東ヨーロッパ語 80 CL8MSWIN1251 MS Windows コード・ページ 1251 8 ビット・ラテン語 / キリル文字 88 WE8MSWIN1252 MS Windows コード・ページ 1252 8 ビット西ヨーロッパ語 80 EL8MSWIN1253 MS Windows コード・ページ 1253 8 ビット・ラテン語 / ギリシャ語 80 WE8EBCDIC1047E Latin 1/ オープン・システム 1047 9F WE8EBCDIC1140 EBCDIC コード・ページ 1140 8 ビット西ヨーロッパ語 9F WE8EBCDIC1140C EBCDIC コード・ページ 1140 クライアント 8 ビット西ヨーロッパ語 9F WE8EBCDIC1145 EBCDIC コード・ページ 1145 8 ビット西ヨーロッパ語 9F WE8EBCDIC1146 EBCDIC コード・ページ 1146 8 ビット西ヨーロッパ語 9F WE8EBCDIC1148 EBCDIC コード・ページ 1148 8 ビット西ヨーロッパ語 9F 3-38 Oracle Database グローバリゼーション・サポート・ガイド 通貨パラメータ 表 3-12 ユーロ記号をサポートしているキャラクタ・セット(続き) キャラクタ・セット名 説明 ユーロ記号の 16 進コード値 WE8EBCDIC1148C EBCDIC コード・ページ 1148 クライアント 8 ビット西ヨーロッパ語 9F EL8ISO8859P7 ISO 8859-7 ラテン語 / ギリシャ語 A4 IW8MSWIN1255 MS Windows コード・ページ 1255 8 ビット・ラテン語 / ヘブライ語 80 AR8MSWIN1256 MS Windows コード・ページ 1256 8 ビット・ラテン語 / アラビア語 80 TR8MSWIN1254 MS Windows コード・ページ 1254 8 ビット・トルコ語 80 BLT8MSWIN1257 MS Windows コード・ページ 1257 バルト語 80 VN8MSWIN1258 MS Windows コード・ページ 1258 8 ビット・ベトナム語 80 TH8TISASCII タイ工業規格 620-2533 - ASCII 8 ビット 80 AL32UTF8 Unicode 3.2 UTF-8 ユニバーサル・キャラクタ・セット E282AC UTF8 CESU-8 E282AC AL16UTF16 Unicode 3.2 UTF-16 ユニバーサル・キャラクタ・セット 20AC UTFE Unicode 3.0 の UTF-EBCDIC エンコーディング CA4653 ZHT16HKSCS MS Windows コード・ページ 950 香港補足キャラクタ・セット付き A3E1 ZHS32GB18030 GB18030-2000 A2E3 WE8BS2000E Siemens EBCDIC.DF.04 8 ビット西ヨーロッパ語 9F グローバリゼーション・サポート環境の設定 3-39 通貨パラメータ Oracle のユーロ・サポート 欧州通貨連合(European Monetary Union: EMU)の 12 の加盟国は、自国通貨としてユーロ を使用しています。NLS_TERRITORY を対応する EMU 加盟国(オーストリア、ベルギー、 フィンランド、フランス、ドイツ、ギリシャ、アイルランド、イタリア、ルクセンブルグ、 オランダ、ポルトガルおよびスペイン)に設定すると、NLS_CURRENCY および NLS_DUAL_ CURRENCY のデフォルト値が EUR に設定されます。 移行期間(1999 ~ 2001 年)中は、Oracle8i 以上の Oracle に次のユーロ・サポート機能が提 供されていました。 ■ NLS_CURRENCY が各国の 1 次通貨として定義されていました。 ■ NLS_ISO_CURRENCY が、特定の地域の ISO 通貨コードとして定義されていました。 ■ NLS_DUAL_CURRENCY が、特定の地域の 2 次通貨記号(通常はユーロ)として定義され ていました。 Oracle9i リリース 2(9.2)からは、NLS_ISO_CURRENCY の値に従って、ユーロを使用する EMU 加盟国用の ISO 通貨記号が EUR に設定されます。たとえば、NLS_ISO_CURRENCY が FRANCE に設定されているとします。次の SELECT 文を入力します。 SELECT TO_CHAR(TOTAL, 'C099G999D99') "TOTAL" FROM orders WHERE customer_id=585; 出力は次のようになります。 TOTAL ------EUR12.673,49 廃止になった各国通貨記号を引き続き使用する必要がある場合は、それをサーバー上では初 期化ファイルのパラメータとして、クライアント上では環境変数として定義することで、 NLS_DUAL_CURRENCY または NLS_CURRENCY のデフォルトをオーバーライドできます。 注意 : NLS_CURRENCY または NLS_DUAL_CURRENCY を有効にするには、 クライアント上で NLS_LANG も設定する必要があります。 NLS_ISO_CURRENCY の値から導出される ISO 通貨記号はオーバーライドできません。 3-40 Oracle Database グローバリゼーション・サポート・ガイド 通貨パラメータ NLS_MONETARY_CHARACTERS プロパティ 説明 パラメータ・タイプ 文字列 パラメータの有効範囲 環境変数 デフォルト値 NLS_TERRITORY から導出 値の範囲 有効な任意の文字 NLS_MONETARY_CHARACTERS では、通貨式で数値グループを区切る文字を指定します。た とえば、地域が米国の場合、3 桁のセパレータはカンマで、小数点セパレータはピリオドで す。 NLS_CREDIT プロパティ 説明 パラメータ・タイプ 文字列 パラメータの有効範囲 環境変数 デフォルト値 NLS_TERRITORY から導出 値の範囲 最大 9 バイト(NULL を含まない)の任意の文字列 NLS_CREDIT は、財務レポートで貸方を表示する記号を設定します。このパラメータのデ フォルト値は、NLS_TERRITORY によって決定されます。たとえば、空白は NLS_CREDIT の有効な値です。 このパラメータが指定できるのは、クライアント環境のみです。 このパラメータは、OCIGetNlsInfo() 関数を使用して取得できます。 グローバリゼーション・サポート環境の設定 3-41 言語ソート・パラメータ NLS_DEBIT プロパティ 説明 パラメータ・タイプ 文字列 パラメータの有効範囲 環境変数 デフォルト値 NLS_TERRITORY から導出 値の範囲 最大 9 バイト(NULL を含まない)の任意の文字列 NLS_DEBIT は、財務レポートで借方を表示する記号を設定します。このパラメータのデ フォルト値は、NLS_TERRITORY によって決定されます。たとえば、マイナス符号(-)は、 NLS_DEBIT の有効な値です。 このパラメータが指定できるのは、クライアント環境のみです。 このパラメータは、OCIGetNlsInfo() 関数を使用して取得できます。 言語ソート・パラメータ 言語ソート・パラメータを使用して、データのソート方法を選択できます。 この項の内容は、次のとおりです。 ■ NLS_SORT ■ NLS_COMP 関連項目 : 第 5 章「言語ソートと文字列検索」 NLS_SORT プロパティ 説明 パラメータ・タイプ 文字列 パラメータの有効範囲 初期化パラメータ、環境変数、ALTER SESSION および SQL 関数 デフォルト値 NLS_LANGUAGE から導出 値の範囲 BINARY または有効な言語ソート名 3-42 Oracle Database グローバリゼーション・サポート・ガイド 言語ソート・パラメータ NLS_SORT は、文字データのソート・タイプを指定します。これにより、NLS_LANGUAGE から導出されるデフォルト値をオーバーライドします。 NLS_SORT の構文は、次のとおりです。 NLS_SORT = BINARY | sort_name BINARY はバイナリ・ソートを指定し、sort_name は言語ソート基準を指定します。 NLS_SORT の値は、WHERE、START WITH、IN/OUT、BETWEEN、CASE WHEN、HAVING、 ORDER BY の各 SQL 操作に影響します。他のすべての SQL 演算子の場合は、バイナリ・ モードの場合にのみ比較が実行されます。 例 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 文を使用します。 関連項目 : ■ ■ ■ 第 5 章「言語ソートと文字列検索」 ALTER SESSION 文の詳細は、 『Oracle Database SQL リファレンス』 を参照してください。 言語ソート名のリストは、A-27 ページの「言語ソート」を参照してく ださい。 グローバリゼーション・サポート環境の設定 3-43 言語ソート・パラメータ NLS_COMP プロパティ 説明 パラメータ・タイプ 文字列 パラメータの有効範囲 初期化パラメータ、環境変数および ALTER SESSION デフォルト値 BINARY 値の範囲 BINARY または ANSI NLS_COMP の値は、WHERE、START WITH、IN/OUT、BETWEEN、CASE WHEN、HAVING、 ORDER BY の各 SQL 操作に影響します。他のすべての SQL 演算子の場合は、バイナリ・ モードの場合にのみ比較が実行されます。 バイナリ比較のかわりに言語比較を実行する場合は、NLS_COMP を使用すると SQL 文に NLSSORT 関数を使用する複雑な処理を回避できます。NLS_COMP を ANSI に設定すると、 SQL 操作では NLS_SORT の値に基づいて言語比較が実行されます。 次のように NLS_COMP を ANSI に設定します。 ALTER SESSION SET NLS_COMP = ANSI; NLS_COMP を ANSI に設定すると、言語索引によって、言語上の比較のパフォーマンスが向 上します。 言語索引を使用可能にするには、次の構文を使用します。 CREATE INDEX i ON t(NLSSORT(col, 'NLS_SORT=FRENCH')); 関連項目 : ■ 5-3 ページ「言語ソートの使用」 ■ 5-20 ページ「言語索引の使用」 3-44 Oracle Database グローバリゼーション・サポート・ガイド キャラクタ・セット変換パラメータ キャラクタ・セット変換パラメータ この項の内容は、次のとおりです。 ■ NLS_NCHAR_CONV_EXCP NLS_NCHAR_CONV_EXCP プロパティ 説明 パラメータ・タイプ 文字列 パラメータの有効範囲 初期化パラメータ、ALTER SESSION、ALTER SYSTEM デフォルト値 FALSE 値の範囲 TRUE または FALSE NLS_NCHAR_CONV_EXCP は、NCHAR/NVARCHAR データと CHAR/VARCHAR2 データの間で 暗黙的または明示的な文字列型の変換時にデータが消失した場合に、エラーをレポートする かどうかを決定します。デフォルト値の場合、エラーはレポートされません。 関連項目 : キャラクタ・セット変換中のデータ消失の詳細は、第 11 章 「キャラクタ・セットの移行」を参照してください。 グローバリゼーション・サポート環境の設定 3-45 長さセマンティクス 長さセマンティクス この項の内容は、次のとおりです。 ■ NLS_LENGTH_SEMANTICS NLS_LENGTH_SEMANTICS プロパティ 説明 パラメータ・タイプ 文字列 パラメータの有効範囲 環境変数、初期化パラメータ、ALTER SESSION および ALTER SYSTEM デフォルト値 BYTE 値の範囲 BYTE または CHAR デフォルトでは、文字データ型 CHAR および VARCHAR2 は、文字単位ではなくバイト単位で 指定します。したがって、表定義で CHAR(20) と指定すると、文字データを格納するために 20 バイトが割り当てられます。 データベース・キャラクタ・セットでシングルバイト文字コード体系が使用されている場合 は、文字数がバイト数と同じであるため、このような指定は適切に処理されます。データ ベース・キャラクタ・セットでマルチバイト文字コード体系が使用されている場合は、1 文 字が 1 バイト以上で構成される場合があるため、バイト数は文字数とは異なります。した がって、特定の文字数に対して予測される最大バイト数を見込んで、列幅を慎重に選択する 必要があります。この問題は、列サイズの定義時にキャラクタ・セマンティクスに切り替え ることで回避できます。 NLS_LENGTH_SEMANTICS によって、CHAR、VARCHAR2 および LONG の各列をバイト・セ マンティクスまたはキャラクタ・セマンティクスのいずれかを使用して作成できます。 NCHAR、NVARCHAR2、CLOB および NCLOB の各列は、常に文字ベースです。既存の列は、 影響を受けません。 既存のアプリケーションとの互換性を維持するためには、バイト・セマンティクスを使用す る必要があります。 NLS_LENGTH_SEMANTICS は、SYS および SYSTEM の表には適用されません。データ・ ディクショナリでは、常にバイト・セマンティクスが使用されます。 クライアント上で NLS_LENGTH_SEMANTICS 環境変数が設定されていない場合、クライア ント・セッションはデフォルトでデータベース・サーバー上の NLS_LENGTH_SEMANTICS の値に設定されることに注意してください。これにより、ネットワーク上のすべてのクライ アント・セッションは同じ NLS_LENGTH_SEMANTICS 動作となります。各クライアント上 で個別に環境変数を設定すると、そのクライアントのサーバー初期化パラメータをオーバー ライドできます。 3-46 Oracle Database グローバリゼーション・サポート・ガイド 長さセマンティクス 関連項目 : ■ ■ 2-11 ページ「長さセマンティクス」 長さセマンティクスの詳細は、 『Oracle Database 概要』を参照してく ださい。 グローバリゼーション・サポート環境の設定 3-47 長さセマンティクス 3-48 Oracle Database グローバリゼーション・サポート・ガイド 4 日時データ型とタイム・ゾーン・サポート この章の内容は、次のとおりです。 ■ 日時データ型、期間データ型およびタイム・ゾーン・サポートの概要 ■ 日時データ型と期間データ型 ■ 日時および時間隔の演算と比較 ■ 日時 SQL 関数 ■ 日時およびタイム・ゾーン・パラメータと環境変数 ■ タイム・ゾーン・ファイルの選択 ■ タイム・ゾーン・ファイルのアップグレード ■ データベースのタイム・ゾーンの設定 ■ AT TIME ZONE 句を使用したタイム・ゾーンの変換 ■ セッションのタイム・ゾーンの設定 ■ 夏時間のサポート 日時データ型とタイム・ゾーン・サポート 4-1 日時データ型、期間データ型およびタイム・ゾーン・サポートの概要 日時データ型、期間データ型およびタイム・ゾーン・サポート の概要 企業は複数のタイム・ゾーンにまたがってトランザクションを実行しています。Oracle の日 時データ型、期間データ型およびタイム・ゾーン・サポートにより、イベントとトランザク ションの時間に関して一貫性のある情報を格納できます。 注意 : この章では、Oracle の日時データ型と期間データ型について説明 します。特に明記している場合を除き、ANSI データ型や他の種類のデー タ型については説明しません。 日時データ型と期間データ型 日時データ型は、DATE、TIMESTAMP、TIMESTAMP WITH TIME ZONE および TIMESTAMP 日時データ型 WITH LOCAL TIME ZONE です。日時データ型の値を Datetimes と呼ぶこともあります。 期間データ型は、INTERVAL YEAR TO MONTH および INTERVAL DAY TO SECOND です。 期間データ型 期間データ型の値を Intervals と呼ぶこともあります。 Datatimes と Intervals は、どちらも複数のフィールドで構成されます。これらのフィールド の値により、データ型の値が決定されます。Oracle のすべての日時および期間データ型に適 用されるフィールドは、次のとおりです。 ■ YEAR ■ MONTH ■ DAY ■ HOUR ■ MINUTE ■ SECOND TIMESTAMP WITH TIME ZONE には、次のフィールドも含まれます。 ■ TIMEZONE_HOUR ■ TIMEZONE_MINUTE ■ TIMEZONE_REGION ■ TIMEZONE_ABBR TIMESTAMP WITH LOCAL TIME ZONE はタイム・ゾーン情報の内部格納には使用されませ んが、TZH:TZM または TZR TZD 書式要素が指定されている場合は、SQL 出力にローカルの タイム・ゾーン情報を表示できます。 4-2 Oracle Database グローバリゼーション・サポート・ガイド 日時データ型と期間データ型 次の項では、日時データ型と期間データ型の詳細を説明します。 ■ 日時データ型 ■ 期間データ型 関連項目 : 日時フィールドと時間隔フィールドの有効な値については、 『Oracle Database SQL リファレンス』を参照してください。書式要素につ いては、 『Oracle Database SQL リファレンス』も参照してください。 日時データ型 この項の内容は、次のとおりです。 ■ DATE データ型 ■ TIMESTAMP データ型 ■ TIMESTAMP WITH TIME ZONE データ型 ■ TIMESTAMP WITH LOCAL TIME ZONE データ型 ■ 日時データ型への値の挿入 ■ TIMESTAMP データ型の選択 DATE データ型 DATE データ型を使用して、日付および時刻情報が格納されます。日付および時刻情報は CHARACTER および NUMBER データ型の両方で表現できますが、DATE データ型は特別に 関連付けられているプロパティがあります。DATE 値ごとに、次の世紀、年、月、日、時間、 分および秒の情報が格納されます。 日付値は次の方法で指定できます。 ■ 日付値をリテラルとして指定 ■ TO_DATE 関数を使用して文字値または数値を日付値に変換 日付は、ANSI 日付リテラルまたは Oracle 日付値として指定できます。 ANSI 日付リテラルには時間部分がなく、次の書式で正確に指定する必要があります。 DATE 'YYYY-MM-DD' 次に ANSI 日付リテラルの例を示します。 DATE '1998-12-25' または、次の例に示すように Oracle 日付値を指定することもできます。 TO_DATE('1998-DEC-25 17:30','YYYY-MON-DD HH24:MI','NLS_DATE_LANGUAGE=AMERICAN') 日時データ型とタイム・ゾーン・サポート 4-3 日時データ型と期間データ型 Oracle 日付値のデフォルト書式は、NLS_DATE_FORMAT および NLS_DATE_LANGUAGE 初期 化パラメータから導出されます。この例の日付書式には、日を表す 2 桁の数値、月名の略 称、年の最後の 2 桁および 24 時間指定が含まれています。NLS_DATE_LANGUAGE の指定が 含まれていますが、これはどのロケールでも DEC は MON に有効な値ではないためです。 デフォルト日付書式の文字値が日付式に使用されている場合は、自動的に日付値に変換され ます。 時刻要素を含めずに日付値を指定した場合、デフォルトの時刻として午前 0 時に設定されま す。日付を含めずに日付値を指定した場合、デフォルトの日付として現在の月の第 1 日に設 定されます。 DATE の列には、常に日付と時刻の両方のフィールドが含まれます。時刻部分を指定せずに 問合せに日付書式を使用する場合は、DATE 列の時刻フィールドが午前 0 時に設定されてい ることを確認する必要があります。TRUNC (date) SQL 関数を使用すると、時刻フィールドが 午前 0 時に設定されていることを確認できます。また、問合せを使用して等価性または非等 価性(= または !=)のかわりに大小の関係(<、<=、>= または >)をテストすることもで きます。時刻フィールドが午前 0 時に設定されていない場合、Oracle では予期した問合せ結 果が戻されないことがあります。 関連項目 : ■ DATE データ型の詳細は、『Oracle Database SQL リファレンス』を参 照してください。 ■ 3-21 ページ「NLS_DATE_FORMAT」 ■ 3-22 ページ「NLS_DATE_LANGUAGE」 ■ リテラル、MM などの書式要素および TO_DATE 関数の詳細は、 『Oracle Database SQL リファレンス』を参照してください。 TIMESTAMP データ型 TIMESTAMP データ型は、DATE データ型の拡張です。このデータ型を使用して、年、月、 日、時間、分および秒の値が格納されます。また、DATE データ型では格納されない小数秒 も格納されます。 TIMESTAMP データ型は次のように指定します。 TIMESTAMP [(fractional_seconds_precision)] fractional_seconds_precision はオプションで、SECOND 日時フィールドの小数部の 桁数を指定します。値の範囲は 0 ~ 9 で、デフォルトは 6 です。 たとえば、'26-JUN-02 09:39:16.78' は 16.78 秒を示します。78 は 2 桁のため、小数秒 の精度は 2 です。 4-4 Oracle Database グローバリゼーション・サポート・ガイド 日時データ型と期間データ型 TIMESTAMP リテラルは、次のような書式で指定できます。 TIMESTAMP 'YYYY-MM-DD HH24:MI:SS.FF' この例に示す書式を使用して、次のように TIMESTAMP をリテラルとして指定します。 TIMESTAMP '1997-01-31 09:26:50.12' NLS_TIMESTAMP_FORMAT 初期化パラメータの値により、文字列から TIMESTAMP データ型 への変換時のタイムスタンプ書式が決定されます。NLS_DATE_LANGUAGE により、MON な ど、文字データの使用言語が決定されます。 関連項目 : ■ TIMESTAMP データ型の詳細は、『Oracle Database SQL リファレンス』 を参照してください。 ■ 3-24 ページ「NLS_TIMESTAMP_FORMAT」 ■ 3-22 ページ「NLS_DATE_LANGUAGE」 TIMESTAMP WITH TIME ZONE データ型 TIMESTAMP WITH TIME ZONE は TIMESTAMP のバリアントで、値にはタイム・ゾーン・ オフセットまたはタイム・ゾーン・リージョン名が含まれます。タイム・ゾーン・オフセッ トは、ローカル時間と UTC(協定世界時、以前のグリニッジ標準時)との時差(時間およ び分単位)です。TIMESTAMP WITH TIME ZONE データ型は次のように指定します。 TIMESTAMP [(fractional_seconds_precision)] WITH TIME ZONE fractional_seconds_precision はオプションで、SECOND 日時フィールドの小数部の 桁数を指定します。 TIMESTAMP WITH TIME ZONE は、次のようにリテラルとして指定できます。 TIMESTAMP '1997-01-31 09:26:56.66 +02:00' 2 つの TIMESTAMP WITH TIME ZONE 値が UTC で同じ時刻を表している場合は、データに 格納されている TIME ZONE のオフセットに関係なく同一とみなされます。たとえば、次の 2 つの式の値は同じです。 TIMESTAMP '1999-01-15 8:00:00 -8:00' TIMESTAMP '1999-01-15 11:00:00 -5:00' UTC オフセットは TZR(タイム・ゾーン・リージョン)書式要素で置き換えることができ ます。次の式は、タイム・ゾーン・リージョンに US/Pacific を指定しています。 TIMESTAMP '1999-01-15 8:00:00 US/Pacific' 日時データ型とタイム・ゾーン・サポート 4-5 日時データ型と期間データ型 標準時間から夏時間への切替時に境界を明確にするには、TZR 書式要素および対応する TZD 書式要素の両方を使用します。TZD 書式要素は、夏時間情報を含むタイム・ゾーン・リー ジョンの略称です。たとえば、米国 / 太平洋標準時間の場合は PST、米国 / 太平洋夏時間の 場合は PDT です。次のように指定すると、確実に夏時間の値が戻されます。 TIMESTAMP '1999-10-29 01:30:00 US/Pacific PDT' ERROR_ON_OVERLAP_TIME セッション・パラメータを TRUE に設定していて、TZD 書式要 素を追加しないと、日時の値が不明確な場合はエラーが戻されます。ERROR_ON_OVERLAP_ TIME が FALSE(デフォルト値)に設定されている場合、あいまいな日時は標準時間として 解析されます。 TIMESTAMP WITH TIME ZONE データ型のデフォルトの日付書式は、NLS_TIMESTAMP_ TZ_FORMAT 初期化パラメータの値により決定されます。 関連項目 : ■ ■ TIMESTAMP WITH TIME ZONE データ型の詳細は、 『Oracle Database SQL リファレンス』を参照してください。 小数秒の精度の詳細は、4-4 ページの「TIMESTAMP データ型」を参 照してください。 ■ 4-27 ページ「夏時間のサポート」 ■ 3-25 ページ「NLS_TIMESTAMP_TZ_FORMAT」 ■ ■ 書式要素の詳細は、 『Oracle Database SQL リファレンス』を参照して ください。 ERROR_ON_OVERLAP_TIME セッション・パラメータの設定の詳細は、 『Oracle Database SQL リファレンス』を参照してください。 TIMESTAMP WITH LOCAL TIME ZONE データ型 TIMESTAMP WITH LOCAL TIME ZONE は、TIMESTAMP のもう 1 つのバリアントです。 TIMESTAMP WITH TIME ZONE とは異なり、データベースに格納されるデータはデータ ベースのタイム・ゾーンに対して正規化され、タイム・ゾーン・オフセットは列データの一 部として格納されません。ユーザーがデータを検索すると、そのユーザーのローカル・セッ ションのタイム・ゾーンで戻されます。タイム・ゾーン・オフセットは、ローカル時間と UTC(協定世界時、以前のグリニッジ標準時)との時差(時間および分単位)です。 TIMESTAMP WITH LOCAL TIME ZONE データ型は次のように指定します。 TIMESTAMP [(fractional_seconds_precision)] WITH LOCAL TIME ZONE fractional_seconds_precision はオプションで、SECOND 日時フィールドの小数部の 桁数を指定します。 4-6 Oracle Database グローバリゼーション・サポート・ガイド 日時データ型と期間データ型 TIMESTAMP WITH LOCAL TIME ZONE のリテラルはありませんが、TIMESTAMP WITH LOCAL TIME ZONE 列に TIMESTAMP リテラルと TIMESTAMP WITH TIME ZONE リテラル を挿入できます。 TIMESTAMP WITH LOCAL TIME ZONE のデフォルトの日付書式は、NLS_TIMESTAMP_ FORMAT 初期化パラメータの値により決定されます。 関連項目 : ■ ■ ■ TIMESTAMP WITH LOCAL TIME ZONE データ型の詳細は、 『Oracle Database SQL リファレンス』を参照してください。 小数秒の精度の詳細は、4-4 ページの「TIMESTAMP データ型」を参 照してください。 3-24 ページ「NLS_TIMESTAMP_FORMAT」 日時データ型への値の挿入 日時列には次の方法で値を挿入できます。 ■ 適切な NLS 書式値に基づく書式を使用した文字列の挿入 ■ リテラルの挿入 ■ 暗黙的な変換の実行対象となるリテラルの挿入 ■ TO_TIMESTAMP、TO_TIMESTAMP_TZ または TO_DATE SQL 関数の使用 次の例に、日時データ型にデータを挿入する方法を示します。 例 4-1 DATE 列へのデータの挿入 日付書式を設定します。 SQL> ALTER SESSION SET NLS_DATE_FORMAT='DD-MON-YYYY HH24:MI:SS'; c_id 列と c_dt 列を含む table_dt 表を作成します。c_id 列は NUMBER データ型で、 データの入力方法を識別できます。c_dt 列は DATE データ型です。 SQL> CREATE TABLE table_dt (c_id NUMBER, c_dt DATE); 日付を文字列として挿入します。 SQL> INSERT INTO table_dt VALUES(1, '01-JAN-2003'); 同じ日付を DATE リテラルとして挿入します。 SQL> INSERT INTO table_dt VALUES(2, DATE '2003-01-01'); 日時データ型とタイム・ゾーン・サポート 4-7 日時データ型と期間データ型 同じ日付を TIMESTAMP リテラルとして挿入します。タイム・ゾーン情報は削除されます。 SQL> INSERT INTO table_dt VALUES(3, TIMESTAMP '2003-01-01 00:00:00 US/Pacific'); TO_DATE 関数を使用して同じ日付を挿入します。 SQL> INSERT INTO table_dt VALUES(4, TO_DATE('01-JAN-2003', 'DD-MON-YYYY')); データを表示します。 SQL> SELECT * FROM table_dt; C_ID ---------1 2 3 4 C_DT -------------------01-JAN-2003 00:00:00 01-JAN-2003 00:00:00 01-JAN-2003 00:00:00 01-JAN-2003 00:00:00 例 4-2 TIMESTAMP 列へのデータの挿入 タイムスタンプ書式を設定します。 SQL> ALTER SESSION SET NLS_TIMESTAMP_FORMAT='DD-MON-YY HH:MI:SSXFF'; c_id 列と c_ts 列を含む table_ts 表を作成します。c_id 列は NUMBER データ型で、 データの入力方法を識別できます。c_ts 列は TIMESTAMP データ型です。 SQL> CREATE TABLE table_ts(c_id NUMBER, c_ts TIMESTAMP); 日付と時刻を文字列として挿入します。 SQL> INSERT INTO table_ts VALUES(1, '01-JAN-2003 2:00:00'); 同じ日付および時刻を TIMESTAMP リテラルとして挿入します。 SQL> INSERT INTO table_ts VALUES(2, TIMESTAMP '2003-01-01 2:00:00'); 同じ日付および時刻を TIMESTAMP WITH TIME ZONE リテラルとして挿入します。挿入し た値は TIMESTAMP 値に変換されます。つまり、タイム・ゾーン情報が削除されます。 SQL> INSERT INTO table_ts VALUES(3, TIMESTAMP '2003-01-01 2:00:00 -08:00'); 4-8 Oracle Database グローバリゼーション・サポート・ガイド 日時データ型と期間データ型 データを表示します。 SQL> SELECT C_ID ---------1 2 3 * FROM table_ts; C_TS ----------------------------01-JAN-03 02:00:00.000000 AM 01-JAN-03 02:00:00.000000 AM 01-JAN-03 02:00:00.000000 AM この 3 つの方法では、いずれも同じ値が格納されることに注意してください。 例 4-3 TIMESTAMP WITH TIME ZONE データ型へのデータの挿入 タイムスタンプ書式を設定します。 SQL> ALTER SESSION SET NLS_TIMESTAMP__TZ_FORMAT='DD-MON-RR HH:MI:SSXFF AM TZR'; タイム・ゾーンを '-07:00' に設定します。 SQL> ALTER SESSION SET TIME_ZONE='-7:00'; c_id 列と c_tstz 列を含む table_tstz 表を作成します。c_id 列は NUMBER データ型 で、データの入力方法を識別できます。c_tstz 列は TIMESTAMP WITH TIME ZONE デー タ型です。 SQL> CREATE TABLE table_tstz (c_id NUMBER, c_tstz TIMESTAMP WITH TIME ZONE); 日付と時刻を文字列として挿入します。 SQL> INSERT INTO table_tstz VALUES(1, '01-JAN-2003 2:00:00 AM -07:00'); 同じ日付および時刻を TIMESTAMP リテラルとして挿入します。挿入した値は TIMESTAMP WITH TIME ZONE リテラルに変換されます。つまり、TIMESTAMP 値にセッションのタイ ム・ゾーンが追加されます。 SQL> INSERT INTO table_tstz VALUES(2, TIMESTAMP '2003-01-01 2:00:00'); 同じ日付および時刻を TIMESTAMP WITH TIME ZONE リテラルとして挿入します。 SQL> INSERT INTO table_tstz VALUES(3, TIMESTAMP '2003-01-01 2:00:00 -8:00'); データを表示します。 SQL> SELECT C_ID ---------1 2 3 * FROM table_tstz; C_TSTZ -----------------------------------01-JAN-03 02:00.00:000000 AM -07:00 01-JAN-03 02:00:00.000000 AM -07:00 01-JAN-03 02:00:00.000000 AM -08:00 日時データ型とタイム・ゾーン・サポート 4-9 日時データ型と期間データ型 方法 3 の場合はタイム・ゾーンが異なることに注意してください。これは、TIMESTAMP WITH TIME ZONE リテラルの一部としてタイム・ゾーン情報が指定されているためです。 例 4-4 TIMESTAMP WITH LOCAL TIME ZONE データ型へのデータの挿入 タイム・ゾーンが UTC-7 である米国コロラド州デンバーで入力されるデータを考えます。 SQL> ALTER SESSION SET TIME_ZONE='07:00'; c_id 列と c_tsltz 列を含む table_tsltz 表を作成します。c_id 列は NUMBER データ型 で、データの入力方法を識別できます。c_tsltz 列は TIMESTAMP WITH LOCAL TIME ZONE データ型です。 SQL> CREATE TABLE table_tsltz (c_id NUMBER, c_tsltz TIMESTAMP WITH LOCAL TIME ZONE); 日付と時刻を文字列として挿入します。 SQL> INSERT INTO table_tsltz VALUES(1, '01-JAN-2003 2:00:00'); 同じデータを TIMESTAMP WITH LOCAL TIME ZONE リテラルとして挿入します。 SQL> INSERT INTO table_tsltz VALUE(2, TIMESTAMP '2003-01-01 2:00:00'); 同じデータを TIMESTAMP WITH TIME ZONE リテラルとして挿入します。データは TIMESTAMP WITH LOCAL TIME ZONE 値に変換されます。つまり、入力したタイム・ゾー ン(-08:00)はセッションのタイム・ゾーン値(-07:00)に変換されます。 SQL> INSERT INTO table_tsltz VALUES(3, TIMESTAMP '2003-01-01 2:00:00 -08:00'); データを表示します。 SQL> SELECT C_ID ---------1 2 3 * FROM table_tsltz; C_TSLTZ -----------------------------------01-JAN-03 02.00.00.000000 AM 01-JAN-03 02.00.00.000000 AM 01-JAN-03 03.00.00.000000 AM 時間が 2 から 3 に変更され、UTC-8 として入力した情報がローカル・タイム・ゾーンに変 更されていることに注意してください。 関連項目 : TO_TIMESTAMP または TO_TIMESTAMP_TZ SQL 関数の詳細 は、4-15 ページの「日時 SQL 関数」を参照してください。 4-10 Oracle Database グローバリゼーション・サポート・ガイド 日時データ型と期間データ型 TIMESTAMP データ型の選択 TIMESTAMP データ型を使用するのは、ロケール情報なしの日時値が必要な場合です。たと えば、組立ラインの作業場にいる従業員がタイムカードに出社と退社を記録した時刻情報を 格納できます。TIMESTAMP データ型では、格納に 7 バイトまたは 11 バイトが使用されま す。 TIMESTAMP WITH TIME ZONE データ型を使用するのは、アプリケーションがタイム・ ゾーンにまたがって使用される場合です。世界各地に支店を持つ銀行を考えます。午前 11 時にロンドンで口座への入金が記録され、午前 9 時にニューヨークで口座からの同額出金が 記録されるとします。この場合、口座には 4 時間だけ預金があることになります。口座トラ ンザクションとともにタイム・ゾーン情報が格納されなければ、この口座は午前 9 時から午 前 11 時まで超過引出しとなります。 TIMESTAMP WITH TIME ZONE データ型では、タイム・ゾーン情報が格納されるため、 データの格納に TIMESTAMP および TIMESTAMP WITH LOCAL TIME ZONE データ型より も 2 バイト多い 13 バイトが必要です。タイム・ゾーンは、UTC からのオフセットまたはタ イム・ゾーン・リージョン名として格納されます。データはそのまま表示または計算に使用 でき、追加の処理は必要ありません。TIMESTAMP WITH TIME ZONE 列は主キーとして使 用できません。TIMESTAMP WITH TIME ZONE 列で索引が作成されると、ファンクション 索引となります。 TIMESTAMP WITH LOCAL TIME ZONE データ型は、タイム・ゾーン情報のないタイムスタ ンプの格納に使用されます。データは、クライアントとの間でやりとりされるたびにデータ ベースのタイム・ゾーンに対して正規化されます。格納には 11 バイトが必要です。 TIMESTAMP WITH LOCAL TIME ZONE データ型は、元のタイム・ゾーンは重要ではない が、イベントの相対時刻が重要な場合に適しています。前述の銀行の例で説明したトランザ クションを考えます。データが TIMESTAMP WITH LOCAL TIME ZONE データ型を使用し て記録されるとします。銀行のデータベースのタイム・ゾーンが Asia/Hong_Kong に設定 されている場合、香港の従業員がデータを表示すると、午後 7 時に入金があり、午後 11 時 に出金があったことがわかります。同じデータをロンドンで表示すると、午前 11 時に入金 があり、午後 3 時に出金があったことが示されます。4 時間の時差は維持されますが、実際 の時刻は異なるため、トランザクションが営業時間中のものかどうかはわかりません。 日時データ型とタイム・ゾーン・サポート 4-11 日時データ型と期間データ型 期間データ型 期間データ型は、期間の格納に使用されます。主な用途は分析関数です。たとえば、株価の 移動平均の計算に使用できます。特定のパーセンタイルに対応する値を判別するには、期間 データ型を使用する必要があります。また、期間データ型は履歴表の更新にも使用できま す。 この項の内容は、次のとおりです。 ■ INTERVAL YEAR TO MONTH データ型 ■ INTERVAL DAY TO SECOND データ型 ■ 期間データ型への値の挿入 関連項目 : 移動平均(および逆パーセンタイル)など、分析関数の詳細 は、 『Oracle データ・ウェアハウス・ガイド』を参照してください。 INTERVAL YEAR TO MONTH データ型 INTERVAL YEAR TO MONTH では、YEAR および MONTH 日時フィールドを使用して期間が 格納されます。INTERVAL YEAR TO MONTH は次のように指定します。 INTERVAL YEAR [(year_precision)] TO MONTH year_precision は、YEAR 日時フィールドの桁数です。year_precision の許容値は 0 ~ 9 で、デフォルト値は 2 です。 時間隔値は、リテラルとして指定できます。時間隔リテラルを指定するには様々な方法があ ります。次に、123 年と 2 か月の時間隔を指定する一例を示します。年の精度は 3 です。 INTERVAL '123-2' YEAR(3) TO MONTH 関連項目 : INTERVAL YEAR TO MONTH データ型を使用して時間隔リテ ラルを指定する方法の詳細は、 『Oracle Database SQL リファレンス』を参 照してください。 INTERVAL DAY TO SECOND データ型 INTERVAL DAY TO SECOND では、期間が日、時間、分および秒単位で格納されます。 このデータ型は次のように指定します。 INTERVAL DAY [(day_precision)] TO SECOND [(fractional_seconds_precision)] day_precision は、DAY 日時フィールドの桁数です。許容値は 0 ~ 9 で、デフォルト値は 2 です。 fractional_seconds_precision は、SECOND 日時フィールドの小数部の桁数です。 許容値は 0 ~ 9 で、デフォルト値は 6 です。 4-12 Oracle Database グローバリゼーション・サポート・ガイド 日時データ型と期間データ型 次に、4 日、5 時間、12 分、10 秒および 0.222 秒の時間隔を指定する一例を示します。小数 秒の精度は 3 です。 INTERVAL '4 5:12:10.222' DAY TO SECOND(3) 時間隔値は、リテラルとして指定できます。時間隔リテラルを指定するには様々な方法があ ります。 関連項目 : INTERVAL DAY TO SECOND データ型を使用して時間隔リテ ラルを指定する方法の詳細は、 『Oracle Database SQL リファレンス』を参 照してください。 期間データ型への値の挿入 時間隔列には次の方法で値を挿入できます。 ■ 時間隔をリテラルとして挿入します。次に例を示します。 INSERT INTO table1 VALUES (INTERVAL '4-2' YEAR TO MONTH); この文では、4 年と 2 か月という期間が挿入されます。 Oracle では、他の ANSI 期間型のリテラルが認識され、Oracle の時間隔値に変換されま す。 ■ NUMTODSINTERVAL、NUMTOYMINTERVAL、TO_DSINTERVAL および TO_YMINTERVAL SQL 関数を使用します。 関連項目 : 4-15 ページ「日時 SQL 関数」 日時データ型とタイム・ゾーン・サポート 4-13 日時および時間隔の演算と比較 日時および時間隔の演算と比較 この項の内容は、次のとおりです。 ■ 日時および時間隔の演算 ■ 日時の比較 ■ 日時データ型の明示的な変換 日時および時間隔の演算 日付(DATE) 、タイムスタンプ(TIMESTAMP、TIMESTAMP WITH TIME ZONE、 TIMESTAMP WITH LOCAL TIME ZONE)および時間隔(INTERVAL DAY TO SECOND、 INTERVAL YEAR TO MONTH)の各データに対する演算操作を実行できます。タイムスタン プ・データ型を期間データ型と併用すると、演算操作で最大精度を維持できます。 日付値とタイムスタンプ値に対する演算操作には、NUMBER 定数を使用できます。タイムス タンプ値は Oracle で内部的に日付値に変換されてから、NUMBER 定数を使用して演算操作が 実行されます。これは、日付値とタイムスタンプ値の両方を含む操作中には、小数秒に関す る情報が失われることを意味します。日時式および時間隔式では、NUMBER 定数が日数とし て解析されます。 各 DATE 値には、時間要素が含まれます。多くの日付操作の結果には、小数部があります。 この小数部は、1 日の一部分を表します。たとえば、1.5 日は 36 時間です。DATE データに 対する一般的な操作では、これらの小数部も Oracle 組込み SQL 関数により戻されます。た とえば、組込み MONTHS_BETWEEN SQL 関数は、2 つの日付間の月数を戻します。結果の小 数部は、大の月である 1 か月のうちの該当部分を表します。 Oracle では、すべてのタイムスタンプ演算が UTC 時間で実行されます。TIMESTAMP WITH LOCAL TIME ZONE データの場合は、日時値がデータベースのタイム・ゾーンから UTC に 変換され、演算の実行後にデータベースのタイム・ゾーンに逆変換されます。TIMESTAMP WITH TIME ZONE データの場合、日時値には常に UTC が使用されるため、変換は必要あり ません。 関連項目 : ■ ■ 日時および時間隔の演算操作の詳細は、 『Oracle Database SQL リファ レンス』を参照してください。 DATE への暗黙的な変換を実行する関数については、4-15 ページの 「日時 SQL 関数」を参照してください。 4-14 Oracle Database グローバリゼーション・サポート・ガイド 日時 SQL 関数 日時の比較 日付値とタイムスタンプ値を比較する場合、Oracle ではデータが高精度のデータ型に変換さ れてから比較されます。たとえば、TIMESTAMP WITH TIME ZONE データ型のデータを TIMESTAMP データ型のデータと比較する場合は、セッションのタイム・ゾーンを使用して TIMESTAMP データが TIMESTAMP WITH TIME ZONE に変換されます。 日付およびタイムスタンプ・データの変換の優先順位は次のとおりです。 1. DATE 2. TIMESTAMP 3. TIMESTAMP WITH LOCAL TIME ZONE 4. TIMESTAMP WITH TIME ZONE どのデータ型のペアの場合も、優先順位リストで小さい番号を持つデータ型が、大きい番号 を持つデータ型に変換されます。 日時データ型の明示的な変換 日時データ型を明示的に変換する場合は、CAST SQL 関数を使用します。DATE、 TIMESTAMP、TIMESTAMP WITH TIME ZONE および TIMESTAMP WITH LOCAL TIME ZONE を、前述のリストに示した他のデータ型に明示的に変換できます。 関連項目 : 『Oracle Database SQL リファレンス』 日時 SQL 関数 日時関数は、日付(DATE) 、タイムスタンプ(TIMESTAMP、TIMESTAMP WITH TIME ZONE、TIMESTAMP WITH LOCAL TIME ZONE)および時間隔(INTERVAL DAY TO SECOND、INTERVAL YEAR TO MONTH)の値を処理します。 日時関数の一部は、Oracle の DATE データ型用に設計されています。引数としてタイムスタ ンプ値を指定すると、Oracle では内部的に入力の型が DATE 値に変換されます。ROUND およ び TRUNC 関数の場合、内部変換は実行されません。 表 4-1 に、Oracle の DATE データ型用に設計されている日時関数を示します。詳細は、 『Oracle Database SQL リファレンス』を参照してください。 表 4-1 DATE データ型用に設計された日時関数 関数 説明 ADD_MONTHS 日付 d および n か月を戻します。 LAST_DAY date を含む月の最終日を戻します。 MONTHS_BETWEEN date1 ~ date2 の月数を戻します。 日時データ型とタイム・ゾーン・サポート 4-15 日時 SQL 関数 表 4-1 DATE データ型用に設計された日時関数(続き) 関数 説明 NEW_TIME zone1 タイム・ゾーンの日時が date の場合は、zone2 タイム・ ゾーンの日時を戻します。 注意 : この関数への入力として使用できるタイム・ゾーンの数は限定 されています。FROM_TZ 関数と日時式を組み合せるほうが、はるか に多数のタイム・ゾーンにアクセスできます。 NEXT_DAY 名前に char を含む最初の平日のうち、date よりも後の日付を戻し ます。 ROUND (date) fmt 書式モデルで指定された単位に丸めた date を戻します。 TRUNC (date) 日の時刻部分を fmt 書式モデルで指定された単位に切り捨てて date を戻します。 表 4-2 に、その他の日時関数を示します。詳細は、『Oracle Database SQL リファレンス』を 参照してください。 表 4-2 その他の日時関数 日時関数 説明 CURRENT_DATE グレゴリオ暦による値のうちセッションのタイム・ゾーンの現在の 日付を DATE データ型で戻します。 CURRENT_TIMESTAMP セッションのタイム・ゾーンの現在の日時を TIMESTAMP WITH TIME ZONE 値として戻します。 DBTIMEZONE データベースのタイム・ゾーンの値を戻します。この値は、タイム・ ゾーン・オフセットまたはタイム・ゾーン・リージョン名です。 EXTRACT (datetime) 日時値または時間隔値の式から、指定された日時フィールドの値を 抽出して戻します。 FROM_TZ タイム・ゾーンの TIMESTAMP 値を TIMESTAMP WITH TIME ZONE 値に変換します。 LOCALTIMESTAMP セッションのタイム・ゾーンの現在の日時を TIMESTAMP データ型の 値として戻します。 NUMTODSINTERVAL 数値 n を INTERVAL DAY TO SECOND リテラルに変換します。 NUMTOYMINTERVAL 数値 n を INTERVAL YEAR TO MONTH リテラルに変換します。 SESSIONTIMEZONE 現行セッションのタイム・ゾーンの値を戻します。 SYS_EXTRACT_UTC タイム・ゾーン・オフセットを使用して日時から UTC を抽出します。 4-16 Oracle Database グローバリゼーション・サポート・ガイド 日時 SQL 関数 表 4-2 その他の日時関数(続き) 日時関数 説明 SYSDATE データベースの起動時に有効だったデータベース・サーバーのオペ レーティング・システムのタイム・ゾーンを考慮して、データベース が常駐するオペレーティング・システムの日時を戻します。 SYSTIMESTAMP データベースが常駐するシステムの小数秒とタイム・ゾーンを含めて システム日付を戻します。 TO_CHAR (datetime) DATE、TIMESTAMP、TIMESTAMP WITH TIME ZONE または TIMESTAMP WITH LOCAL TIME ZONE データ型の日時値または時 間隔値を、fmt 日付書式で指定された書式による VARCHAR2 データ 型の値に変換します。 TO_DSINTERVAL CHAR、VARCHAR2、NCHAR または NVARCHAR2 データ型の文字列を、 INTERVAL DAY TO SECOND データ型の値に変換します。 TO_NCHAR (datetime) DATE、TIMESTAMP、TIMESTAMP WITH TIME ZONE、TIMESTAMP WITH LOCAL TIME ZONE、INTERVAL MONTH TO YEAR または INTERVAL DAY TO SECOND データ型の日時値または時間隔値を、 データベース・キャラクタ・セットから各国語キャラクタ・セットに 変換します。 TO_TIMESTAMP CHAR、VARCHAR2、NCHAR または NVARCHAR2 データ型の文字列を、 TIMESTAMP データ型の値に変換します。 TO_TIMESTAMP_TZ CHAR、VARCHAR2、NCHAR または NVARCHAR2 データ型の文字列を、 TIMESTAMP WITH TIME ZONE データ型の値に変換します。 TO_YMINTERVAL CHAR、VARCHAR2、NCHAR または NVARCHAR2 データ型の文字列を、 INTERVAL YEAR TO MONTH データ型の値に変換します。 TZ_OFFSET 文が実行される日付に基づいて、入力値に対応するタイム・ゾーン・ オフセットを戻します。 関連項目 : 『Oracle Database SQL リファレンス』 日時データ型とタイム・ゾーン・サポート 4-17 日時およびタイム・ゾーン・パラメータと環境変数 日時およびタイム・ゾーン・パラメータと環境変数 この項の内容は、次のとおりです。 ■ 日時書式パラメータ ■ タイム・ゾーン環境変数 ■ 夏時間セッション・パラメータ 日時書式パラメータ 表 4-3 に、日時書式パラメータの名前と説明を示します。 表 4-3 日時書式パラメータ パラメータ 説明 NLS_DATE_FORMAT TO_CHAR 関数および TO_DATE 関数で使用するデフォルトの 日付書式を定義します。 NLS_TIMESTAMP_FORMAT TO_CHAR 関数および TO_TIMESTAMP 関数で使用するデフォ ルトのタイムスタンプ書式を定義します。 NLS_TIMESTAMP_TZ_FORMAT TO_CHAR 関数および TO_TIMESTAMP_TZ 関数で使用する デフォルトのタイムスタンプをタイム・ゾーン書式で定義し ます。 デフォルト値は NLS_TERRITORY から導出されます。 値は、初期化パラメータ・ファイル内で設定することで指定できます。クライアントの場合 は、値をクライアント環境変数として指定できます。 また、初期化パラメータ・ファイルでその値を変更してインスタンスを再起動すると、値を 変更できます。 セッション中に値を変更するには、ALTER SESSION 文を使用します。 関連項目 : ■ 例を含む詳細は、3-20 ページの「日付および時間を指定するパラメー タ」を参照してください。 ■ 3-21 ページ「NLS_DATE_FORMAT」 ■ 3-24 ページ「NLS_TIMESTAMP_FORMAT」 ■ 3-25 ページ「NLS_TIMESTAMP_TZ_FORMAT」 4-18 Oracle Database グローバリゼーション・サポート・ガイド タイム・ゾーン・ファイルの選択 タイム・ゾーン環境変数 タイム・ゾーン環境変数は次のとおりです。 ■ ■ ORA_TZFILE。データベースで使用される Oracle タイム・ゾーン・ファイルを指定しま す。 ORA_SDTZ。デフォルトのセッション・タイム・ゾーンを指定します。 関連項目 : ■ 4-19 ページ「タイム・ゾーン・ファイルの選択」 ■ 4-25 ページ「セッションのタイム・ゾーンの設定」 夏時間セッション・パラメータ ERROR_ON_OVERLAP_TIME は、Oracle による不明確な日時境界値の処理方法を決定する セッション・パラメータです。不明確な日時値は、夏時間と標準時間の間の切替時に発生す ることがあります。 可能な値は TRUE と FALSE です。ERROR_ON_OVERLAP_TIME が TRUE の場合は、不明確な 日時値が検出されるとエラーが戻されます。ERROR_ON_OVERLAP_TIME が FALSE の場合、 不明確な日時値は標準時間とみなされます。デフォルト値は FALSE です。 関連項目 : 4-27 ページ「夏時間のサポート」 タイム・ゾーン・ファイルの選択 Oracle タイム・ゾーン・ファイルには、有効なタイム・ゾーン名が含まれています。タイ ム・ゾーンごとに次の情報も含まれています。 ■ 協定世界時(UTC)からのオフセット。 ■ 夏時間への移行時間。 ■ 標準時間と夏時間の略称。 Oracle ホーム・ディレクトリには、2 つのタイム・ゾーン・ファイルがあります。デフォル トのタイム・ゾーン・ファイルは $ORACLE_HOME/oracore/zoneinfo/ timezonelrg.dat で、データベースで定義されているすべてのタイム・ゾーンが含まれて います。$ORACLE_HOME/oracore/zoneinfo/timezone.dat には、最も一般的なタイ ム・ゾーンのみが含まれています。このファイルは、Oracle9i のデフォルトのタイム・ゾー ン・ファイルです。 大きい方のタイム・ゾーン・ファイルを使用している場合は、データベースに格納された データに、大きい方のファイルに含まれる追加タイム・ゾーンが使用されていないことが明 らかである場合を除き、引き続き大きい方のファイルを使用する必要があります。また、情 報を共有するすべてのデータベースで、同じタイム・ゾーン・ファイルを使用する必要があ ります。 日時データ型とタイム・ゾーン・サポート 4-19 タイム・ゾーン・ファイルの選択 $ORACLE_HOME/oracore/zoneinfo/timezone.dat を使用可能にする手順、またはす でにタイム・ゾーン・ファイルとしてこのファイルを使用しており、Oracle Database 10g 環 境でも引き続きこのファイルを使用する手順は、次のとおりです。 1. データベースが起動している場合はシャットダウンします。 2. 環境変数 ORA_TZFILE を $ORACLE_HOME/oracore/zoneinfo/timezone.dat に設 定します。 3. データベースを再起動します。 注意 : デフォルトのタイム・ゾーン・ファイルをすでに使用している場 合、データベースには小さい方のタイム・ゾーン・ファイルに含まれてい ないタイム・ゾーンを使用するデータが含まれていることがあるため、小 さい方のタイム・ゾーン・ファイルに変更するのは実用的ではありませ ん。 Oracle のタイム・ゾーン・データは、ftp://elsie.nci.nih.gov/pub/ で使用可能な公 開情報から導出されます。Oracle のタイム・ゾーン・データには、このサイトから入手可能 な最新データが反映されていない場合があります。 次の文を入力すると、データベースとともにインストールされるタイム・ゾーン・ファイル からタイム・ゾーンの名前と略称のリストを取得できます。 SELECT tzname, tzabbrev FROM v$timezone_names; デフォルトのタイム・ゾーン・ファイルの場合、この文の出力は次のようになります。 TZNAME -------------------Africa/Algiers Africa/Algiers Africa/Algiers Africa/Algiers Africa/Algiers Africa/Algiers Africa/Cairo Africa/Cairo Africa/Cairo Africa/Casablanca Africa/Casablanca Africa/Casablanca Africa/Casablanca ... W-SU W-SU W-SU TZABBREV ---------LMT PMT WET WEST CET CEST LMT EET EEST LMT WET WEST CET LMT MMT MST 4-20 Oracle Database グローバリゼーション・サポート・ガイド タイム・ゾーン・ファイルの選択 W-SU W-SU W-SU W-SU W-SU W-SU WET WET WET MDST S MSD MSK EET EEST LMT WEST WET 1393 rows selected. Africa/Algiers タイム・ゾーンには 6 つのタイム・ゾーン略称が、Africa/Cairo タイム・ ゾーンには 3 つの略称が、また Africa/Casablanca タイム・ゾーンには 4 つの略称が関連付 けられています。次の表に、タイム・ゾーン略称とその意味を示します。 タイム・ゾーン略称 意味 LMT ローカル標準時間 PMT パリ標準時間 WET 西ヨーロッパ時間 WEST 西ヨーロッパ夏時間 CET 中央ヨーロッパ時間 CEST 中央ヨーロッパ夏時間 EET 東ヨーロッパ時間 EEST 東ヨーロッパ夏時間 1 つの略称が複数のタイム・ゾーンに関連付けられている場合があるため注意してください。 たとえば、CET は、ヨーロッパのタイム・ゾーンに加えて Africa/Algiers と Africa/Casablanca の両方に関連付けられています。 略称ごとにタイム・ゾーン名が繰り返されないタイム・ゾーン・リストが必要な場合は、次 の問合せを使用します。 SELECT UNIQUE tzname FROM v$timezone_names; 日時データ型とタイム・ゾーン・サポート 4-21 タイム・ゾーン・ファイルのアップグレード デフォルトのタイム・ゾーン・ファイルの場合、この出力結果は次のようになります。 TZNAME -------------------Africa/Algiers Africa/Cairo Africa/Casablanca Africa/Ceuta ... US/Pacific US/Pacific-New US/Samoa UTC W-SU WET デフォルトのタイム・ゾーン・ファイルには、350 を超える一意のタイム・ゾーン名が含ま れています。小さいタイム・ゾーン・ファイルには、180 を超える一意のタイム・ゾーン名 が含まれています。 関連項目 : ■ ■ 13-19 ページ「タイム・ゾーン・データのカスタマイズ」 有効な Oracle タイム・ゾーン名のリストは、A-32 ページの「タイム・ ゾーン名」を参照してください。 タイム・ゾーン・ファイルのアップグレード Oracle Database 10g で提供されているタイム・ゾーン・ファイルは、バージョン 1 からバー ジョン 2 へ更新されており、一部のタイム・ゾーン・リージョンの移行ルールの変更が反映 されています。これらの変更は、TIMESTAMP WITH TIME ZONE データ型の既存のデータ に影響する場合があります。たとえば、ユーザーが TIMESTAMP '2003-02-17 09:00 America/Sao_Paulo' と入力すると、タイム・ゾーン・ファイル内の移行ルールに基づい てこのデータが UTC に変換され、ディスクに格納されます。バージョン 1 の移行ルールが 有効であったときは、この例のオフセットが '-02:00' であるため、'2003-02-17 11:00:00' および 'America/Sao_Paulo' のタイムゾーン ID が格納されていました。 バージョン 2 の移行ルールのオフセットは '-03:00' です。ユーザーがデータを取得する場 合、'2003-02-17 08:00:00 American/Sao_Paulo' を受け取ります。元のデータと比 較すると 1 時間の差異があります。 $ORACLE_HOME/rdbms/admin/utltzuv2.sql スクリプトを使用すると、データベース 内の TIMESTAMP WITH TIME ZONE データ型のすべての列を検出できます。データベース のタイム・ゾーン・ファイルをバージョン 2 に更新する前に、このスクリプトを実行しま す。結果は sys.sys_tzuv2_temptab 表に格納されます。この表には、table_owner、 table_name、column_name、rowcount、nested_tab という 5 つの列が含まれます。 4-22 Oracle Database グローバリゼーション・サポート・ガイド タイム・ゾーン・ファイルのアップグレード nested_tab 列は、table_name 列に示された表がネストした表であるかどうかを示しま す。 タイム・ゾーン・ファイルの更新の影響を受けるデータがデータベースに含まれる場合、タ イム・ゾーン・ファイルをバージョン 2 にアップグレードする前に、データをバックアップ します。アップグレード後、データを更新して、データが新しいルールに基づいて格納され ていることを確認する必要があります。たとえば、次のように、scott というユーザーが tztab 表を保持しているとします。 CREATE TABLE tztab(x NUMBER PRIMARY KEY, y TIMESTAMP WITH TIME ZONE); INSERT INTO tztab VALUES(1, timestamp '2003-02-17 09:00:00 America/Sao_Paulo'); アップグレード前に、次のように tztab_back 表を作成できます(ここでは、y 列は、元 の値を保持するために VARCHAR2 として定義されている点に注意してください) 。 CREATE TABLE tztab_back(x NUMBER PRIMARY KEY, y VARCHAR2(256)); INSERT INTO tztab_back SELECT x, TO_CHAR(y, 'YYYY-MM-DD HH24.MI.SSXFF TZR') FROM tztab; アップグレード後、次のように tztab_back の値を使用して、tztab 表のデータを更新す る必要があります。 UPDATE tztab t SET t.y = (SELECT to_timestamp_tz(t1.y,'YYYY-MM-DD HH24.MI.SSXFF TZR') FROM tztab_back t1 WHERE t.x=t1.x); あるいは、アップグレード前にエクスポート・ユーティリティを使用してデータをエクス ポートし、アップグレード後に再度データをインポートできます。詳細は、utltzuv2.sql スクリプトのコメントを参照してください。 移行ルールの変更は TIMESTAMP WITH LOCAL TIME ZONE データ型のデータに影響する 場合がありますが、データをアップグレードする方法はありません。 ブラジルおよびイスラエルのタイム・ゾーン・リージョンは、頻繁に移行ルールが変更され る場合があり、年に 1 回にも及ぶことがあります。一貫性のないデータの格納を防ぐには、 タイム・ゾーン・リージョン名ではなくタイム・ゾーン・オフセットを使用します。 バージョン 2 のタイム・ゾーン・ファイルで更新されたタイム・ゾーン・リージョンを使用 しているユーザーは、すべての Oracle9i Database クライアントおよび Oracle Database 10g サーバーと通信するデータベースを更新する必要があります。これによって、すべての環境 で同じバージョン(バージョン 2)のタイム・ゾーン・ファイルが使用されます。これは、 他のユーザーには必須ではありませんが、お薦めします。タイム・ゾーン・ファイルをバー ジョン 2 に更新する必要があるユーザーは、オラクル社カスタマ・サポート・センターにお 問い合せください。 日時データ型とタイム・ゾーン・サポート 4-23 データベースのタイム・ゾーンの設定 Oracle Database 10g サーバーと通信する Oracle Database 10g クライアントは、バージョン 2 のタイム・ゾーン・ファイルを自動的に取得するため、新規のタイム・ゾーン・ファイル をダウンロードする必要はありません。 関連項目 : タイム・ゾーン・ファイルの更新の詳細は、 $ORACLE_HOME/oracore/zoneinfo/readme.txt を参照してください。 データベースのタイム・ゾーンの設定 データベースの作成時に、CREATE DATABASE 文の SET TIME_ZONE 句を使用してデータ ベースのタイム・ゾーンを設定します。データベースのタイム・ゾーンを設定しなければ、 デフォルトでサーバーのオペレーティング・システムのタイム・ゾーンに設定されます。 タイム・ゾーンは、UTC からの絶対オフセットまたは指定のリージョンに設定できます。 たとえば、タイム・ゾーンを UTC からのオフセットに設定するには、次のような文を使用 します。 CREATE DATABASE db01 ... SET TIME_ZONE='-05:00'; 有効なオフセットの範囲は -12:00 ~ +14:00 です。 タイム・ゾーンを指定のリージョンに設定するには、次のような文を使用します。 CREATE DATABASE db01 ... SET TIME_ZONE='Europe/London'; 注意 : データベースのタイム・ゾーンが関連するのは、TIMESTAMP WITH LOCAL TIME ZONE 列のみです。データベース間でのデータ転送時 にデータ変換を回避してパフォーマンスを改善するために、データベース のタイム・ゾーンは UTC(0:00)に設定することをお薦めします。これ は、分散データベース、レプリケーションおよびエクスポートとインポー トには特に重要です。 データベースのタイム・ゾーンは、ALTER DATABASE 文の SET TIME_ZONE 句を使用して 変更できます。次に例を示します。 ALTER DATABASE SET TIME_ZONE='05:00'; ALTER DATABASE SET TIME_ZONE='Europe/London'; データベースに TIMESTAMP WITH LOCAL TIME ZONE 列を含む表があり、その列にデー タがあると、ALTER DATABASE SET TIME_ZONE 文はエラーを戻します。 4-24 Oracle Database グローバリゼーション・サポート・ガイド セッションのタイム・ゾーンの設定 変更は、データベースを停止して再起動するまで有効になりません。 次の問合せを入力すると、データベースのタイム・ゾーンを確認できます。 SELECT dbtimezone FROM dual; セッションのタイム・ゾーンの設定 デフォルトのセッション・タイム・ゾーンは、ORA_SDTZ 環境変数を使用して設定できま す。ユーザーが TIMESTAMP WITH LOCAL TIME ZONE データを検索すると、そのユー ザー・セッションのタイム・ゾーンで戻されます。セッションのタイム・ゾーンは、 TIMESTAMP 値が TIMESTAMP WITH TIME ZONE または TIMESTAMP WITH LOCAL TIME ZONE データ型に変換される場合にも有効です。 注意 : セッションのタイム・ゾーンを設定しても、SYSDATE および SYSTIMESTAMP SQL 関数から戻される値には影響しません。SYSDATE は、データベースの起動時に有効だったデータベース・サーバーのオペ レーティング・システムのタイム・ゾーンを考慮して、データベースが常 駐するオペレーティング・システムの日時を戻します。 ORA_SDTZ 環境変数は次の値に設定できます。 ■ オペレーティング・システムのローカルのタイム・ゾーン('OS_TZ') ■ データベースのタイム・ゾーン('DB_TZ') ■ UTC からの絶対オフセット('-05:00' など) ■ タイム・ゾーン・リージョン名('Europe/London' など) UNIX 環境(C シェル)で ORA_SDTZ を設定するには、次のような文を使用します。 % % % % setenv setenv setenv setenv ORA_SDTZ ORA_SDTZ ORA_SDTZ ORA_SDTZ 'OS_TZ' 'DB_TZ' '-05:00' 'Europe/London' 特定の SQL セッションのタイム・ゾーンは、ALTER SESSION 文の SET TIME_ZONE 句を 使用して変更できます。 TIME_ZONE は次の値に設定できます。 ■ セッション開始時のデフォルトのローカル・タイム・ゾーン(local) ■ データベースのタイム・ゾーン(dbtimezone) ■ UTC からの絶対オフセット('+10:00' など) ■ タイム・ゾーン・リージョン名('Asia/Hong_Kong' など) 日時データ型とタイム・ゾーン・サポート 4-25 AT TIME ZONE 句を使用したタイム・ゾーンの変換 次のような ALTER SESSION 文を使用します。 ALTER ALTER ALTER ALTER SESSION SESSION SESSION SESSION SET SET SET SET TIME_ZONE=local; TIME_ZONE=dbtimezone; TIME_ZONE='+10:00'; TIME_ZONE='Asia/Hong_Kong'; 次の問合せを入力すると、現行のセッションのタイム・ゾーンを確認できます。 SELECT sessiontimezone FROM dual; AT TIME ZONE 句を使用したタイム・ゾーンの変換 日時 SQL 式には、次のいずれかを使用できます。 ■ 日時列 ■ 日時値となる複合式 日時式には、AT LOCAL 句または AT TIME ZONE 句を含めることができます。AT LOCAL 句を含めると、結果は現在のセッションのタイム・ゾーンで戻されます。AT TIME ZONE 句を含める場合は、その句で次のいずれかの設定を使用します。 ■ ■ ■ ■ ■ タイム・ゾーン・オフセット : 文字列 '(+|-)HH:MM' で、タイム・ゾーンを UTC から のオフセットとして指定します。たとえば、'-07:00' は UTC から 7 時間遅れのタイ ム・ゾーンを指定します。UTC 時間が午前 11 時の場合、'-07:00' タイム・ゾーンの 時間は午前 4 時です。 DBTIMEZONE: Oracle では、データベース作成時に(明示的またはデフォルトで)設定 された、データベースのタイム・ゾーンが使用されます。 SESSIONTIMEZONE: Oracle では、デフォルトまたは最新の ALTER SESSION 文で設定 されたセッションのタイム・ゾーンが使用されます。 タイム・ゾーン・リージョン名 : Oracle では、タイム・ゾーン・リージョン名が示すタ イム・ゾーンの値が戻されます。たとえば、Asia/Hong_Kong を指定できます。 式 : 式で有効なタイム・ゾーン書式の文字列が戻されると、Oracle はそのタイム・ゾー ンの入力を戻します。それ以外の場合、Oracle はエラーを戻します。 4-26 Oracle Database グローバリゼーション・サポート・ガイド 夏時間のサポート 次の例では、America/New_York タイム・ゾーンの日時値を America/Los_Angeles タ イム・ゾーンの日時値に変換しています。 例 4-5 他のタイム・ゾーンへの日時値の変換 SELECT FROM_TZ(CAST(TO_DATE('1999-12-01 11:00:00', 'YYYY-MM-DD HH:MI:SS') AS TIMESTAMP), 'America/New_York') AT TIME ZONE 'America/Los_Angeles' "West Coast Time" FROM DUAL; West Coast Time ---------------------------------------------------------01-DEC-99 08.00.00.000000 AM AMERICA/LOS_ANGELES 関連項目 : 『Oracle Database SQL リファレンス』 夏時間のサポート Oracle では、指定のタイム・ゾーンに夏時間が有効かどうかが自動的に判別され、対応する ローカル時間が戻されます。通常、これを Oracle で判別するには、日時値で十分です。夏 時間の開始期間または終了期間は境界事例です。たとえば、米国東部では、夏時間が有効に なる時点で、時刻が午前 1 時 59 分 59 秒から午前 3 時 0 分 0 秒に変わります。午前 2 時 0 分 0 秒~午前 2 時 59 分 59 秒の時間隔は存在しません。その時間隔に該当する値は無効です。 夏時間の終了時には、時刻が午前 2 時 0 分 0 秒から午前 1 時 0 分 1 秒に変わります。午前 1 時 0 分 1 秒~午前 2 時 0 分 0 秒の時間隔が繰り返されます。この時間隔に含まれる値は、2 回発生するため不明確となります。 このような境界事例を解決するために、Oracle では TZR および TZD 書式要素を使用します。 TZR は、日時入力文字列でのタイム・ゾーン・リージョンを表します。たとえば、 'Australia/North'、'UTC' および 'Singapore' などです。TZD は、夏時間情報を含むタイ ム・ゾーン・リージョンの略称を表します。たとえば、米国 / 太平洋標準時間の場合は 'PST'、米国 / 太平洋夏時間の場合は 'PDT' です。TZR および TZD 書式要素に有効な値のリ ストを表示するには、V$TIMEZONE_NAMES 動的パフォーマンス・ビューの TZNAME 列と TZABBREV 列を問い合せます。 これ以降の内容は、次のとおりです。 ■ 例 : 日時計算への夏時間の影響 関連項目 : 有効なタイム・ゾーンのリストは、A-32 ページの「タイム・ ゾーン名」を参照してください。 日時データ型とタイム・ゾーン・サポート 4-27 夏時間のサポート 例 : 日時計算への夏時間の影響 TIMESTAMP データ型はタイム・ゾーン値を受け入れず、夏時間は計算されません。 TIMESTAMP WITH TIME ZONE および TIMESTAMP WITH LOCAL TIME ZONE データ型 は、次のように動作します。 ■ ■ タイム・ゾーン・リージョンが日時値に関連付けられている場合、データベース・サー バーではリージョンの夏時間規則が認識され、その規則が計算に使用されます。 夏時間を使用しないリージョンについては、夏時間は計算されません。 これ以降は、日時データ型の使用例を使用して説明します。各例では global_orders 表を 使用します。この表には、TIMESTAMP データ型の orderdate1 列と TIMESTAMP WITH TIME ZONE データ型の orderdate2 列が含まれています。global_orders 表は次のよう に作成されます。 CREATE TABLE global_orders ( orderdate1 TIMESTAMP(0), orderdate2 TIMESTAMP(0) WITH TIME ZONE); INSERT INTO global_orders VALUES ( '28-OCT-00 11:24:54 PM', '28-OCT-00 11:24:54 PM America/New_York'); 例 4-6 TIMESTAMP WITH TIME ZONE および TIMESTAMP を使用した夏時間計算の比較 SELECT orderdate1 + INTERVAL '8' HOUR, orderdate2 + INTERVAL '8' HOUR FROM global_orders; 出力は次のようになります。 ORDERDATE1+INTERVAL'8'HOUR -------------------------29-OCT-00 07.24.54.000000 AM ORDERDATE2+INTERVAL'8'HOUR -------------------------29-OCT-00 06.24.54.000000 AM AMERICA/NEW_YORK この例は、各列に 8 時間追加した場合の影響を示しています。この期間には、夏時間の境界 (夏時間から標準時間への切替え)が含まれています。orderdate1 列は TIMESTAMP デー タ型で、夏時間情報は使用されないため、8 時間内に発生する切替えにあわせた調整は実行 されません。TIMESTAMP WITH TIME ZONE データ型では切替えにあわせて調整されるた め、orderdate2 列は orderdate1 列より 1 時間早い時刻を示します。 注意 : 前述の例の global_orders 表を作成した場合は、例 4-7 ~例 4-8 を試す前に global_orders 表を削除してください。 4-28 Oracle Database グローバリゼーション・サポート・ガイド 夏時間のサポート 例 4-7 TIMESTAMP WITH LOCAL TIME ZONE および TIMESTAMP を使用した夏時間計算の比較 TIMESTAMP WITH LOCAL TIME ZONE データ型では、セッション環境にあわせて設定され た TIME_ZONE の値が使用されます。次の文は、TIME_ZONE セッション・パラメータの値 を設定して orders 表を作成します。global_orders 表には、TIMESTAMP データ型の 1 列と TIMESTAMP WITH LOCAL TIME ZONE データ型の 1 列があります。 ALTER SESSION SET TIME_ZONE='America/New_York'; CREATE TABLE global_orders ( orderdate1 TIMESTAMP(0), orderdate2 TIMESTAMP(0) WITH LOCAL TIME ZONE ); INSERT INTO global_orders VALUES ( '28-OCT-00 11:24:54 PM', '28-OCT-00 11:24:54 PM' ); 両方の列に 8 時間を追加します。 SELECT orderdate1 + INTERVAL '8' HOUR, orderdate2 + INTERVAL '8' HOUR FROM global_orders; orderdate2 の日時値にはタイム・ゾーン・リージョンが関連付けられているため、Oracle サーバーではそのリージョンに夏時間規則が使用されます。そのため、出力は例 4-6 と同じ になります。TIMESTAMP データ型の場合は夏時間が計算されないため、2 つの計算には 1 時間の時差があり、計算は夏時間境界にまたがっています。 例 4-8 夏時間を使用しないリージョンについては計算されない夏時間 タイム・ゾーン・リージョンを UTC に設定します。UTC では、夏時間は使用されません。 ALTER SESSION SET TIME_ZONE='UTC'; global_orders 表を切り捨てます。 TRUNCATE TABLE global_orders; global_orders 表に値を挿入します。 INSERT INTO global_orders VALUES ( '28-OCT-00 11:24:54 PM', TIMESTAMP '2000-10-28 23:24:54 ' ); 各列に 8 時間を追加します。 SELECT orderdate1 + INTERVAL '8' HOUR, orderdate2 + INTERVAL '8' HOUR FROM global_orders; 出力は次のようになります。 ORDERDATE1+INTERVAL'8'HOUR -------------------------29-OCT-00 07.24.54.000000000 AM ORDERDATE2+INTERVAL'8'HOUR --------------------------29-OCT-00 07.24.54.000000000 AM UTC UTC タイム・ゾーン・リージョンの場合は夏時間が計算されないため、時刻は同じです。 日時データ型とタイム・ゾーン・サポート 4-29 夏時間のサポート 4-30 Oracle Database グローバリゼーション・サポート・ガイド 5 言語ソートと文字列検索 この章では、Oracle 環境での文字列のソートと検索について説明します。この章の内容は、 次のとおりです。 ■ Oracle のソート機能の概要 ■ バイナリ・ソートの使用 ■ 言語ソートの使用 ■ 言語ソート機能 ■ 言語索引の使用 ■ 大 / 小文字区別およびアクセント区別なしの言語ソート ■ 言語の文字列検索 ■ 多言語環境での SQL 正規表現 言語ソートと文字列検索 5-1 Oracle のソート機能の概要 Oracle のソート機能の概要 ソート順序は言語によって異なります。さらに、同じアルファベットを使用している文化ま たは国の間でも、文字のソート方法が異なる場合があります。たとえば、デンマーク語の文 字 Æ は、Z の後にきます。また、Y と Ü は同じ文字の変形とみなされます。 ソート順序には、大 / 小文字区別の有無を指定できます。ケース ケースは、大文字であるか小文字 ケース であるかの条件を指します。たとえばラテン・アルファベットの A は、小文字の絵文字 a の 大文字。 ソート順序では、発音区別記号を無視するか考慮するかを指定できます。発音区別記号 発音区別記号は、 発音区別記号 文字または文字列の上または下にある記号で、それが付いていない場合の文字とは発音が異 なることを示します。たとえば、façade の場合、セディラ(,)は発音区別記号です。セ ディラが付いている場合は、c の発音が変化する。 表音的なソート順序や、文字の外観に基づいたソート順序も指定できます。たとえば、東南 アジアの表意文字の場合は、画数に基づいたソート順序を指定できます。ソート上の一般的 な問題となるものに、結合文字があります。たとえば、伝統的なスペイン語の ch は 1 つの 独立した文字であり、ソート順序では c の後にきます。つまり、正しいソート順序は、 cerveza、colorado、cheremoya のようになります。したがって、文字 c は、次にくる文字 が h であるかどうかが確認されるまで、ソートされません。 Oracle には、次のタイプのソートが用意されています。 ■ バイナリ・ソート ■ 単一言語ソート ■ 多言語ソート これらのソートにより、単一言語に応じた正確なソート順序に加えて、多言語 ISO 規格 (ISO 14651)に準拠したソートが実現できます。この規格は、複数言語を同時に処理するよ うに設計されています。 5-2 Oracle Database グローバリゼーション・サポート・ガイド 言語ソートの使用 バイナリ・ソートの使用 文字データをソートする方法の 1 つは、文字コード体系によって定義された文字の数値に基 づいています。このようなソートをバイナリ・ソート バイナリ・ソートと呼びます。バイナリ・ソートは最も バイナリ・ソート 高速なソート・タイプです。ASCII や EBCDIC の規格では、文字 A ~ Z を昇順の数値で定 義しているため、英語のアルファベットについてはこのタイプで正しいソート結果が得られ ます。 注意 : ASCII 規格では、大文字はすべて小文字の前にきます。逆に、 EBCDIC 規格では、小文字はすべて大文字の前にきます。 他の言語で使用されている文字が存在すると、通常、バイナリ・ソートでは正しい結果が得 られません。たとえば、文字コード体系で Ä の数値が B の数値より高い場合、昇順の ORDER BY 問合せでは、ABC、ABZ、BCD、ÄBC の順で文字列が戻ります。表意文字を使用するアジ ア言語の場合、通常、バイナリ・ソートに言語的な意味はありません。 言語ソートの使用 文字のアルファベット順に一致するソート基準を得るには、文字コード体系内の数値に依存 せずに文字をソートする別のソート方法を使用する必要があります。この方法を言語ソート 言語ソート と呼びます。言語ソートでは、各文字を、言語的に適切な文字順序を反映した数値に置換す ることによって、ソート操作を行います。 Oracle では、単一言語ソートと多言語ソートの 2 種類の言語ソートを提供しています。 この項の内容は、次のとおりです。 ■ 単一言語ソート ■ 多言語ソート ■ 多言語ソート・レベル ■ 言語ソートの例 言語ソートと文字列検索 5-3 言語ソートの使用 単一言語ソート 単一言語ソートの場合、文字列は 2 つの手順で比較されます。最初の手順では、メジャー値 テーブルにある文字列全体のメジャー値が比較されます。通常、同じ外観の文字には、同じ メジャー値があります。第 2 の手順では、マイナー値テーブルにあるマイナー値が比較され ます。メジャー値とマイナー値は Oracle によって定義されます。Oracle では、マイナー値 が異なる同じメジャー値を使用して、発音区別記号を持つ文字と大 / 小文字区別を定義しま す。 各メジャー・テーブル・エントリには、1 文字の Unicode コード・ポイントとメジャー値が コード・ポイント 含まれています。Unicode コード・ポイントは、1 文字を表す 16 ビットのバイナリ値です。 表 5-1 に、a、A、ä、Ä および b のソートに使用するサンプルの値を示します。 表 5-1 文字のサンプルとそのソートのメジャー値とマイナー値 絵文字 メジャー値 マイナー値 a 15 5 A 15 10 ä 15 15 Ä 15 20 b 20 5 注意 : 単一言語ソートは、Unicode 以外のマルチバイト・データベース・ キャラクタ・セットには使用できません。データベース・キャラクタ・セッ トが Unicode 以外のマルチバイトである場合に単一言語ソートが指定されて いる場合、デフォルトのソート順序はデータベース・キャラクタ・セットの バイナリ・ソート順序です。例外の 1 つに、UNICODE_BINARY があります。 このソートは、すべてのキャラクタ・セットに使用できます。 関連項目 : 6-2 ページ「Unicode の概要」 5-4 Oracle Database グローバリゼーション・サポート・ガイド 言語ソートの使用 多言語ソート Oracle には多言語ソートが用意されているため、複数言語のデータを 1 つのソートとして ソートできます。この機能は、複雑なソート・ルールや多言語データベースを持つ地域また は言語に有効です。さらに、Oracle Database 10g では、従来のリリースで定義されたすべて のソート順序をサポートしています。 アジア諸国の言語データや多言語データに対しては、ISO 14651 規格と Unicode 3.2 規格に 基づいたソート・メカニズムが用意されています。漢字は、画数、ピンイン(中国語の発音 記号)または部首で順序付けされます。 また、多言語ソートでは、標準的な同値化や補助文字も処理できます。標準的な同値化 標準的な同値化は、 標準的な同値化 文字間または文字列間での基本的な同値化です。たとえば、ç は c と , の組合せと同じです。 補助文字は 補助文字 Unicode 3.2 でのユーザー定義文字または事前定義済の文字であり、特定のコー ド範囲内の 2 つのコード・ポイントを必要とします。1 つの多言語ソートに最大 110 万の コード・ポイントを定義できます。 たとえば、Oracle ではフランス語の単一言語ソート(FRENCH)がサポートされていますが、 フランス語の多言語ソート(FRENCH_M)を指定できます。_M は、多言語ソートに対する ISO 14651 規格を表します。このソート順では、GENERIC_M ソート順に基づき、発音区別記 号を右から左へとソートできます。したがって、表に多言語データが格納されている場合 は、多言語ソートの使用をお薦めします。表にフランス語のみが含まれている場合は、フラ ンス語の単一言語ソートを使用する方が、メモリー使用量が少ないため、パフォーマンスは 向上します。メモリー使用量が少ないのは、フランス語の単一言語ソートの方が、フランス 語の多言語ソートよりも定義されている文字が少ないためです。ソートの有効範囲とパ フォーマンスの間には、トレードオフがあります。 関連項目 : ■ 5-10 ページ「標準的な同値化」 ■ 6-3 ページ「補助文字」 言語ソートと文字列検索 5-5 言語ソートの使用 多言語ソート・レベル Oracle では、多言語ソートを次の 3 つの精度レベルで評価します。 ■ 1 次レベル・ソート ■ 2 次レベル・ソート ■ 3 次レベル・ソート 1 次レベル・ソート 1 次レベル・ソートでは、文字 a と文字 b の相違など、ベース文字 ベース文字間の相違を識別します。 ベース文字 a が b の前にくるか、b が a の前にくるか、あるいは同値かの定義は、個々のロケールに準 じます。文字をバイナリで表現することは、意味のないことです。無視可能文字には、0 (ゼロ)の 1 次レベルの順序 順序(重み)を割り当てます。その結果、その文字は 1 次レベルで 順序 無視されます。他のレベルでの無視可能文字には、そのレベルで順序 0(ゼロ)が割り当て られます。 たとえば、1 次レベルでは、bat のすべてのバリエーションが、bet のすべてのバリエー ションより前にきます。どちらの場合も、それぞれのバリエーションは次のように様々な順 序で表示されます。 Bat bat BAT BET Bet bet 関連項目 : 5-9 ページ「無視可能文字」 2 次レベル・ソート 2 次レベル・ソートでは、ベース文字(1 次レベル・ソート)を識別してから、特定のベー ス文字に付いている様々な発音区別記号を識別します。たとえば、文字 Ä と文字 A の相違は、 発音区別記号の有無のみです。したがって、Ä と A は 2 次レベルでは異なる文字ですが、1 次レベルでは同じ文字です。これは、両方とも同じベース文字(A)から導出されているた めです。 次のリストは、1 次レベル(resume が resumes の前)と 2 次レベル(発音区別記号なしの 文字列が発音区別記号付きの文字列の前)でソートされています。 resume résumé Résumé Resumes resumes résumés 5-6 Oracle Database グローバリゼーション・サポート・ガイド 言語ソートの使用 3 次レベル・ソート 3 次レベル・ソートでは、ベース文字(1 次レベル・ソート)、発音区別記号(2 次レベル・ ソート)およびケース(大文字と小文字)が識別されます。さらに、+、- および * などの 特殊文字も識別できます。 次に 3 次レベル・ソートの例を示します。 ■ ■ ■ 文字 a と A は、1 次レベルと 2 次レベルでは同じ文字ですが、3 次レベルでは異なる文字 です。これは、ケースが異なるためです。 文字 ä と A は、1 次レベルでは同じ文字ですが、2 次レベルと 3 次レベルでは異なる文字 です。 ダッシュ文字 - の 1 次レベルと 2 次レベルでの順序は、0(ゼロ)です。つまり、この文 字は、1 次と 2 次のレベルでは無視されます。ダッシュを 0(ゼロ)以外の 1 次レベル 順序を持つ別の文字、たとえば、u と比較しても、1 次レベルでの結果は取得できませ ん。これは、u と比較する対象の文字がないためです。この場合は、3 次レベルでのみ - と u の相違が検索されます。 次のリストは、1 次レベル(resume が resumes の前)、2 次レベル(発音区別記号なしの 文字列が発音区別記号付きの文字列の前)および 3 次レベル(小文字が大文字の前)でソー トされています。 resume Resume résumé Résumé resumes Resumes résumés Résumés 言語ソートと文字列検索 5-7 言語ソート機能 言語ソート機能 この項では、次の言語ソート機能の違いについて説明します。 ■ ベース文字 ■ 無視可能文字 ■ 短縮文字 ■ 拡張文字 ■ 状況依存文字 ■ 標準的な同値化 ■ 逆 2 次ソート ■ タイ語 / ラオ語文字に対する文字の再配列 ■ 特殊文字 ■ 特殊組合せ文字 ■ 特殊な大文字 ■ 特殊な小文字 言語ソートは、必要な特性を含むようにカスタマイズできます。 関連項目 : 第 13 章「ロケールのカスタマイズ」 ベース文字 ベース文字はベース文字表に定義されています。この表によって、各文字がベース文字に マップされます。たとえば、a、A、ä および Ä はすべて、ベース文字 ベース文字である a にマップされ ベース文字 ます。この概念は、Oracle Text で作業する場合に特に重要です。 関連項目 : 『Oracle Text リファレンス』 5-8 Oracle Database グローバリゼーション・サポート・ガイド 言語ソート機能 無視可能文字 言語ソートでは、一部の文字を無視できます。このような文字を無視可能文字 無視可能文字と呼びます。 無視可能文字 無視可能文字には、発音区別記号と句読点の 2 種類があります。 無視可能な発音区別記号の例は、次のとおりです。 ■ ^。したがって、rôle は role と同じ文字として処理されます。 ■ ウムラウト。したがって、naïve は naive と同じ文字として処理されます。 無視可能な句読点の例として、ダッシュ文字 - があります。この文字が無視される場合は、 multi-lingual を multilingual と同じ文字、e-mail を email と同じ文字として処理 できます。 短縮文字 ソート要素は、通常、単一文字で構成されていますが、一部のロケールでは、1 つの文字列 に 2 つ以上の文字がある場合があります。その場合、その文字列はソート時にも単一のソー ト要素とみなす必要があります。たとえば、伝統的なスペイン語の文字列 ch は、2 つの文 字で構成されています。これらの文字は、多言語ソートでは短縮文字 短縮文字と呼ばれ、単一言語 短縮文字 ソートでは、特殊組合せ文字 特殊組合せ文字と呼ばれます。 特殊組合せ文字 合成文字を短縮文字と混同しないでください。á などの合成文字は、それぞれ独自のエン 合成文字 コーディングを持つ a と ' に分解できます。合成文字と短縮文字の違いは、合成文字が端末 に 1 文字として表示できるのに対して、短縮文字はソートにのみ使用され、それを構成する 文字はそれぞれ個別に表示される必要があることです。 拡張文字 一部のロケールでは、特定の文字を文字列であるかのようにソートする必要があります。ド イツ語の文字 ß(強調の s)がその例です。この文字は、文字列 SS と同じようにソートされ ます。別の例では、ö は、od の後、of の前に oe のようにソートされます。これらの文字 は、多言語ソートでは、拡張文字 拡張文字と呼ばれ、単一言語ソートでは、特殊文字 特殊文字と呼ばれます。 拡張文字 特殊文字 短縮文字の場合と同様、拡張文字に対する置換文字列は、ソート目的の場合のみ意味があり ます。 言語ソートと文字列検索 5-9 言語ソート機能 状況依存文字 日本語では、全角のダッシュ — に似た長母音記号は、先行する文字の母音を長く伸ばすこと を示す長音記号を表しています。ソート順序は、長音記号の前にある母音に応じて異なりま す。この方法は、状況依存ソートと呼ばれます。たとえば、文字 ka の後にくる長音記号ー は、a を長く伸ばすことを示し、a と同じように処理されます。一方、文字 ki の後にくる 長音記号ーは、i を長く伸ばすことを示し、i と同じように処理されます。これをラテン文 字に変換すると、ソートは次のようになります。 kaa ka— kai kia kii ki— ------ kaa kai kia kii kii and ka— follows follows follows and ki— are kakai kia are the same because i is after a because i is after a because i is after a the same 標準的な同値化 標準的な同値化は多言語ソートの属性であり、同値のコード・ポイント順序のソート方法を 記述したものです。標準的な同値化が特定の言語ソートに適用される場合、標準的に同値の 文字列は同等とみなされます。 1 つの Unicode のコード・ポイントが、一連のベース文字のコード・ポイントに発音区別記 号のコード・ポイントを加えたものと同じ値である場合があります。これは、Unicode の標 準的な同値化と呼ばれます。たとえば、ä は、ウムラウト付きのベース文字 a と同値です。 言語フラグ CANONICAL_EQUIVALENCE=TRUE は、特定の言語ソートに Unicode 3.2 に定義 されている標準的な同値化規則をすべて適用する必要があることを示します。Oracle 定義の 言語ソートには、標準的な同値化フラグ用の適切な設定が含まれています。すべてのデータ が合成された形式の場合は、このフラグを FALSE に設定すると、比較と順序付け機能が高 速になります。 たとえば、次の文字列を考えてみます。 ■ äa(a ウムラウトの後に a) ■ a¨b(a の後にウムラウトと b) ■ äc(a ウムラウトの後に c) CANONICAL_EQUIVALENCE=FALSE の場合、文字列のソート順序は次のようになります。 a¨b äa äc これは、標準的な同値化が適用されない場合は a が ä の前にくるためです。 5-10 Oracle Database グローバリゼーション・サポート・ガイド 言語ソート機能 CANONICAL_EQUIVALENCE=TRUE の場合、文字列のソート順序は次のようになります。 äa a¨b äc これは、ä と a¨ が標準的に同値として処理されるためです。 Oracle Locale Builder を使用すると、既存の多言語ソートで標準的な同値化フラグの設定を 表示できます。Oracle Locale Builder を使用してカスタマイズした多言語ソートを作成する 場合は、標準的な同値化フラグを必要に応じて設定できます。 関連項目 : 標準的な同値化フラグの設定の詳細は、13-35 ページの 「Oracle Locale Builder を使用した新規言語ソートの作成」を参照してくだ さい。 逆 2 次ソート フランス語では、発音区別記号付き文字を含む文字列をソートする場合、最初にベース文字 が左から右の順に比較されますが、発音区別記号付き文字自体は右から左の順に比較されま す。たとえば、デフォルトでは、発音区別記号付き文字は、発音区別記号が付かない文字の 後に置かれます。そのため、フランス語ソートでは、Èdit は Edít の前にきます。この 2 つ の文字列は 1 次レベルでは同値です。2 次レベルの順序は、発音区別記号付き文字を右から 左へ調べてから決定されます。個別のロケールでは、発音区別記号付き文字を右から左の ルールでソートするように要求できます。逆 2 次ソートを使用可能にするには、REVERSE_ SECONDARY 言語フラグを TRUE に設定します。 関連項目 : 逆 2 次フラグの設定の詳細は、13-35 ページの「Oracle Locale Builder を使用した新規言語ソートの作成」を参照してください。 タイ語 / ラオ語文字に対する文字の再配列 タイ語とラオ語の場合、ソート前に一部の文字を後続の文字と最初に入れ替える必要があり ます。通常、この種の文字は、母音を表す記号であるため、次にくる文字は子音になりま す。子音と母音は、ソート前に入れ替える必要があります。ソート前に入れ替える必要のあ るすべての文字について、SWAP_WITH_NEXT 言語フラグを設定してください。 関連項目 : SWAP_WITH_NEXT フラグの設定の詳細は、13-35 ページの 「Oracle Locale Builder を使用した新規言語ソートの作成」を参照してくだ さい。 言語ソートと文字列検索 5-11 言語ソート機能 特殊文字 特殊文字とは、単一言語ソートで使用する用語です。この文字は、多言語ソートでは、拡張 拡張 特殊文字 文字と呼ばれます。 文字 関連項目 : 5-9 ページ「拡張文字」 特殊組合せ文字 特殊組合せ文字とは、単一言語ソートで使用する用語です。この文字は、多言語ソートで 特殊組合せ文字 は、短縮文字 短縮文字と呼ばれます。 短縮文字 関連項目 : 5-9 ページ「短縮文字」 特殊な大文字 1 つの小文字が複数の大文字にマップされる場合があります。たとえば、伝統的なドイツ語 では、ß の大文字は、SS です。 このような大 / 小文字の変換は、NLS_UPPER、NLS_LOWER および NLS_INITCAP の各 SQL 関数によって、言語ソート基準で設定された規則に従って処理されます。SQL 関数 UPPER、LOWER および INITCAP では、これらの特殊文字を処理できません。 NLS_UPPER SQL 関数は、小文字の文字列と同じキャラクタ・セットからの大文字をすべて 戻します。次の例に、NLS_SORT が XGERMAN に設定されている場合の NLS_UPPER 関数の 結果を示します。 SELECT NLS_UPPER ('große') "Uppercase" FROM DUAL; Upper ----GROSSE 関連項目 : 『Oracle Database SQL リファレンス』 特殊な小文字 Oracle は、特殊な小文字をサポートしています。1 つの大文字が複数の小文字にマップされ る場合があります。たとえば、トルコ語の大文字 I は、小文字の i のドットなしになります。 5-12 Oracle Database グローバリゼーション・サポート・ガイド 大 / 小文字区別およびアクセント区別なしの言語ソート 大 / 小文字区別およびアクセント区別なしの言語ソート Oracle データベース内の操作では、常に大 / 小文字およびアクセント(発音区別記号)が区 別されます。大 / 小文字およびアクセントを区別しない比較とソートの実行が必要になる場 合があります。 以前のバージョンのデータベースでは、NLS_UPPER および NLS_LOWER SQL 関数を使用し て大 / 小文字区別なしの問合せを実行できました。この 2 つの関数は、特定の言語ソート定 義に基づいて文字列の大 / 小文字を変更します。これにより、使用言語に関係なく大 / 小文 字を区別しない検索を実行できます。たとえば、次のように test4 表を作成します。 SQL> SQL> SQL> SQL> SQL> CREATE INSERT INSERT INSERT SELECT TABLE test4(word VARCHAR2(12)); INTO test4 VALUES('GROSSE'); INTO test4 VALUES('Große'); INTO test4 VALUES('große'); * FROM test4; WORD -----------GROSSE Große große GROSSE に対して、次のように大 / 小文字を区別した検索を実行します。 SQL> SELECT word FROM test4 WHERE word='GROSSE'; WORD -----------GROSSE NLS_UPPER 関数を使用し、GROSSE に対して大 / 小文字を区別しない検索を実行します。 SELECT word FROM test4 WHERE NLS_UPPER(word, 'NLS_SORT = XGERMAN') = 'GROSSE'; WORD -----------GROSSE Große große NLS_UPPER および NLS_LOWER 関数は、アプリケーション・ロジックにハードコード化す る必要があるため、これらの関数を使用すると煩雑な場合があります。Oracle9i リリース 2 (9.2)には、部分的な解決策が導入されました。この解決策では、GENERIC_BASELETTER 言語ソートを使用します。GENERIC_BASELETTER ソートでは、すべての文字がベース文字 の値に基づいてグループ化されます。そのために、大 / 小文字区別と発音区別記号の違いは 無視されます。 言語ソートと文字列検索 5-13 大 / 小文字区別およびアクセント区別なしの言語ソート 次の例に、GENERIC_BASELETTER の問合せを示します。最初に、test5 という表を作成し ます。 CREATE INSERT INSERT INSERT INSERT SELECT TABLE test5(product VARCHAR2(20)); INTO test5 VALUES('DATABASE'); INTO test5 VALUES('dätäbase'); INTO test5 VALUES('database'); INTO test5 VALUES('Database'); product FROM test5; PRODUCT -------------------DATABASE dätäbase database Database デフォルトのバイナリ・ソートを使用して、test5 から database を選択します。 SELECT product FROM test5 WHERE product='database'; PRODUCT -------------------database NLS_COMP を ANSI に設定し、NLS_SORT の値に基づいて言語ソートを実行します。 ALTER SESSION SET NLS_COMP=ANSI; NLS_SORT を GENERIC_BASELETTER に設定します。 ALTER SESSION SET NLS_SORT=GENERIC_BASELETTER; 再び test5 から database を選択します。 SELECT * FROM test5 WHERE product='database'; PRODUCT -------------------DATABASE dätäbase database Database test5 の行がすべて選択されることに注意してください。 5-14 Oracle Database グローバリゼーション・サポート・ガイド 大 / 小文字区別およびアクセント区別なしの言語ソート GENERIC_BASELETTER ソートでは、基礎となる文字のベース文字が定義されます。そのた め、大 / 小文字およびアクセントを区別しない言語ソートの動作がシミュレートされます。 ただし、GENERIC_BASELETTER 検索は特定の言語に基づかないため、言語を区別した検索 ではありません。 Oracle Database 10g には、言語ソート用に大 / 小文字区別なしのオプションとアクセント区 別なしのオプションが用意されています。 次のタイプの単一言語ソートおよび多言語ソートが用意されています。 ■ ■ ■ ベース文字、発音区別記号、句読点およびケースに関する情報を使用する言語ソート。 これらは、5-3 ページの「言語ソートの使用」で説明した標準的な単一言語ソートと多 言語ソートです。 ベース文字、発音区別記号および句読点に関する情報を使用する言語ソート。このタイ プのソートを、大 大 / 小文字を区別しないソートと呼びます。 小文字を区別しない ベース文字に関する情報のみを使用する言語ソート。このタイプのソートを、アクセン アクセン トを区別しないソートと呼びます(アクセント アクセントは発音区別記号 。アクセン トを区別しない アクセント 発音区別記号と同義です) 発音区別記号 トを区別しないソートでは常に、大 / 小文字も区別されません。 これ以降の内容は、次のとおりです。 ■ 大 / 小文字およびアクセントを区別しないソートの例 ■ 大 / 小文字またはアクセントを区別しないソートの指定 関連項目 : ■ 3-42 ページ「NLS_SORT」 ■ 3-44 ページ「NLS_COMP」 言語ソートと文字列検索 5-15 大 / 小文字区別およびアクセント区別なしの言語ソート 大 / 小文字およびアクセントを区別しないソートの例 後述の例は、次のソートを示しています。 ■ ベース文字、発音区別記号、句読点およびケースに関する情報を使用するソート ■ 大 / 小文字を区別しないソート ■ アクセントを区別しないソート 例 5-1 ベース文字、発音区別記号、句読点およびケース情報を使用した言語ソート 次のリストは、ベース文字、発音区別記号、句読点およびケース情報を使用してソートされ ています。 blackbird Blackbird black bird black-bird Black-bird bläckbird blackbîrd 例 5-2 大 / 小文字を区別しない言語ソート 次のリストは、ベース文字、発音区別記号および句読点情報を使用し、ケースを無視して ソートされています。 Blackbird blackbird bläckbird blackbîrd black bird black-bird Black-bird black-bird と Black-bird の違いはケースのみのため、ソートでは同じ値となります。 この 2 つの値は、リストでどちらが前にきてもかまいません。Blackbird と blackbird の 値もソートでは同じ値となり、リストでどちらが前にきてもかまいません。 5-16 Oracle Database グローバリゼーション・サポート・ガイド 大 / 小文字区別およびアクセント区別なしの言語ソート 例 5-3 アクセントを区別しない言語ソート 次のリストは、ベース文字情報のみを使用してソートされています。発音区別記号、句読点 およびケース情報は使用されていません。 blackbird bläckbird blackbîrd Blackbird BlackBird Black-bird Black bird 大 / 小文字またはアクセントを区別しないソートの指定 NLS_SORT セッション・パラメータを使用して、大 / 小文字またはアクセントを区別しない ソートを指定します。 ■ ■ 大 / 小文字を区別しないソートの場合は、Oracle ソート名に _CI を追加します。 アクセントも大 / 小文字も区別しないソートの場合は、Oracle ソート名に _AI を追加し ます。 たとえば、NLS_SORT を次のタイプの値に設定できます。 FRENCH_M_AI XGERMAN_CI バイナリ・ソートでも、大 / 小文字またはアクセントを区別しないように指定できます。 NLS_SORT の値として BINARY_CI を指定すると、アクセントを区別するが大 / 小文字は区 別しないソートを指定したことになります。BINARY_AI は、アクセントも大 / 小文字も区 別しないバイナリ・ソートを指定します。キャラクタ・セットのバイナリ・ソート順序が使 用中のキャラクタ・セットに適している場合は、バイナリ・ソートを使用します。 たとえば、NLS_LANG 環境変数を AMERICAN_AMERICA.WE8ISO8859P1 に設定し、次のよ うに test1 という表を作成して移入します。 SQL> SQL> SQL> SQL> SQL> SQL> CREATE INSERT INSERT INSERT INSERT SELECT TABLE test1 (letter VARCHAR2(10)); INTO test1 VALUES('ä'); INTO test1 VALUES('a'); INTO test1 VALUES('A'); INTO test1 VALUES('Z'); * FROM test1; LETTER ----------ä a A Z 言語ソートと文字列検索 5-17 大 / 小文字区別およびアクセント区別なしの言語ソート NLS_SORT のデフォルト値は BINARY です。次の文を使用して、test1 表内の文字のバイ ナリ・ソートを実行します。 SELECT * FROM test1 ORDER BY letter; NLS_SORT の値を変更するには、次のような文を入力します。 ALTER SESSION SET NLS_SORT=BINARY_CI; 次の表に、NLS_SORT を BINARY、BINARY_CI および BINARY_AI に設定した結果得られ るソート順序を示します。 BINARY BINARY_CI BINARY_AI A a ä Z A a a Z A ä ä Z NLS_SORT=BINARY の場合は、大文字が小文字の前にきます。発音区別記号付きの文字は最 後に表示されます。 ソートで発音区別記号は考慮されるが大 / 小文字は区別されない場合(BINARY_CI)は、 発音区別記号付きの文字が最後に表示されます。 大 / 小文字区別と発音区別記号がどちらも無視される場合(BINARY_AI)、ä はベース文字 a を持つ他の文字でソートされます。ベース文字 a を持つ文字はすべて、z の前にきます。 キャラクタ・セットが US7ASCII またはバイナリ・ソートと同じソート順序を持つキャラク タ・セットの場合は、パフォーマンスを改善するためにバイナリ・ソートを使用できます。 次の表に、表のドイツ語ソートの結果得られるソート順序を示します。 GERMAN GERMAN_CI GERMAN_AI a a ä A A a ä ä A Z Z Z ドイツ語ソートでは、小文字が大文字の前にきて、ä が Z の前にきます。このソートで大 / 小文字区別と発音区別記号の両方が無視される場合(GERMAN_AI)、ä はベース文字 a を持 つ他の文字を使用して表示されます。 5-18 Oracle Database グローバリゼーション・サポート・ガイド 大 / 小文字区別およびアクセント区別なしの言語ソート 言語ソートの例 この項の例は、バイナリ・ソート、単一言語ソートおよび多言語ソートを示しています。例 を使用する準備として、表 test2 を作成して移入します。次の文を入力します。 SQL> SQL> SQL> SQL> CREATE INSERT INSERT INSERT TABLE test2 (name VARCHAR2(20)); INTO test2 VALUES('Diet'); INTO test2 VALUES('À voir'); INTO test2 VALUES('Freizeit'); 例 5-4 バイナリ・ソート ORDER BY 句でバイナリ・ソートを使用します。 SQL> SELECT * FROM test2 ORDER BY name; 次の出力が表示されます。 Diet Freizeit À voir バイナリ・ソートの結果、À voir がリストの最後に表示されることに注意してください。 例 5-5 ドイツ語の単一言語ソート NLS_SORT パラメータを german に設定して NLSSORT 関数を使用し、ドイツ語ソートを取 得します。 SQL> SELECT * FROM test2 ORDER BY NLSSORT(name, 'NLS_SORT=german'); 次の出力が表示されます。 À voir Diet Freizeit ドイツ語ソートでは、À voir がリストの先頭になることに注意してください。 言語ソートと文字列検索 5-19 言語索引の使用 例 5-6 ドイツ語の単一言語ソートと多言語ソートの比較 図 5-1 に示した文字列を test に挿入します。この場合、横棒付きの D の後に ñ がきます。 図 5-1 文字列 NLS_SORT パラメータを german に設定して NLSSORT 関数を使用し、ドイツ語の単一言語 ソートを実行します。 SQL> SELECT * FROM test2 ORDER BY NLSSORT(name, 'NLS_SORT=german'); ドイツ語ソートからの出力では、新しい文字列がエントリ・リストの最後に表示されます。 これは、その文字がドイツ語ソートでは認識されないためです。 次の文を入力して多言語ソートを実行します。 SQL> SELECT * FROM test2 ORDER BY NLSSORT(name, 'NLS_SORT=generic_m'); 出力では、ISO ソート・ルールに従って新しい文字列が Diet の後に表示されます。 関連項目 : ■ ■ 9-10 ページ「NLSSORT 関数」 NLS_SORT パラメータの設定と変更の詳細は、3-42 ページの 「NLS_SORT」を参照してください。 言語索引の使用 言語ソートは言語固有であるため、バイナリ・ソートよりもデータ処理が増えます。ASCII 文字のバイナリ・コードには文字の順序が反映されているため、言語 ASCII のバイナリ・ ソートを使用すると正確で高速です。複数言語のデータがデータベースに格納されている場 合、アプリケーションでは、言語に応じて異なるソート基準に従い、SELECT...ORDER BY 文から戻されたデータをソートできます。このようなソートは、言語索引を使用すると、パ フォーマンスを低下させずに実現できます。列の言語索引によって、挿入と更新の操作速度 が低下しますが、ORDER BY 句を使用した言語ソートのパフォーマンスは大幅に向上します。 英語以外の言語を使用する関数索引を作成できます。この索引は、NLS_SORT で決められて いる言語ソート順序を変更しません。単にパフォーマンスを向上させるためのものです。次 の文では、ドイツ語のソートに基づく索引が作成されます。 CREATE TABLE my_table(name VARCHAR(20) NOT NULL) /*NOT NULL ensures that the index is used */ CREATE INDEX nls_index ON my_table (NLSSORT(name, 'NLS_SORT = German')); 5-20 Oracle Database グローバリゼーション・サポート・ガイド 言語索引の使用 索引の作成後に、次のような SELECT 文を入力します。 SELECT * FROM my_table ORDER BY name; この文は、索引を使用しない場合の同じ SELECT 文より速く結果が戻されます。 これ以降の内容は、次のとおりです。 ■ 複数言語の言語索引 ■ 言語索引の使用要件 関連項目 : ■ ■ 『Oracle Database 概要』 ファンクション索引の詳細は、『Oracle Database SQL リファレンス』 を参照してください。 複数言語の言語索引 複数言語のデータに言語索引を作成する方法には、次の 3 通りがあります。 ■ アプリケーションでサポートされている各言語の言語索引を作成します。このアプロー チは単純ですが、大量のディスク領域が必要になります。索引ごとに、その索引が作成 されている言語以外の言語の複数行が、順番の最後にまとめて照合されます。次の例で は、フランス語とドイツ語の言語索引を作成しています。 CREATE INDEX french_index ON employees (NLSSORT(employee_id, 'NLS_ SORT=FRENCH')); CREATE INDEX german_index ON employees (NLSSORT(employee_id, 'NLS_ SORT=GERMAN')); 使用する索引は、ORDER BY 句で指定した NLS_SORT セッション・パラメータまたは NLSSORT 関数の引数によって決定されます。たとえば、NLS_SORT セッション・パラ メータが FRENCH に設定されている場合、Oracle では french_index が使用されま す。GERMAN に設定されている場合は、german_index が使用されます。 ■ すべての言語に対して単一言語索引を作成します。そのためには、NLSSORT 関数のパラ メータとして言語列(5-23 ページの「例 : フランス語の言語索引の設定」で LANG_COL の)を使用する必要があります。言語列には、索引の作成対象となる列のデータの NLS_LANGUAGE 値が含まれます。次の例では、複数言語に対する単一言語索引を作成 しています。この索引では、NLS_LANGUAGE に対して同じ値を持つ行がまとめてソー トされます。 CREATE INDEX i ON t (NLSSORT(col, 'NLS_SORT=' || LANG_COL)); 問合せでは、ORDER BY 句で指定した NLSSORT 関数の引数に基づいて索引が選択され ます。 言語ソートと文字列検索 5-21 言語索引の使用 ■ GENERIC_M や FRENCH_M などの多言語ソートのいずれかを使用して、すべての言語に 単一言語索引を作成します。この索引は、ISO 14651 に定義されている規則に従って文 字をソートします。次に例を示します。 CREATE INDEX i on t (NLSSORT(col, 'NLS_SORT=GENERIC_M'); 関連項目 : Unicode ソートの詳細は、5-5 ページの「多言語ソート」を参 照してください。 言語索引の使用要件 言語索引を使用するための要件は、次のとおりです。 ■ ■ NLS_SORT を適切に設定 列が NOT NULL として宣言されていない場合に WHERE 句で NOT NULL を指定する 方法 この項では、次の例についても説明します。 ■ 例 : フランス語の言語索引の設定 NLS_SORT を適切に設定 NLS_SORT パラメータで、言語ソートに使用する言語定義を指定する必要があります。たと えば、フランス語の言語ソート順序を使用する場合は、NLS_SORT を FRENCH に設定する必 要があります。また、ドイツ語の言語ソート順序を使用する場合は、NLS_SORT を GERMAN に設定する必要があります。 NLS_SORT を設定するには、複数の方法があります。すべての言語に同じ SQL 文を使用で きるように、NLS_SORT をクライアントの環境変数として設定する必要があります。クライ アント環境で NLS_SORT を設定すると、様々な言語索引を使用できます。 関連項目 : 3-42 ページ「NLS_SORT」 列が NOT NULL として宣言されていない場合に WHERE 句で NOT NULL を 指定する方法 言語索引を持つ列で ORDER BY column_name 句を使用する必要がある場合は、次のよう に WHERE 句を含めます。 WHERE NLSSORT(column_name) IS NOT NULL 列がスキーマ内で NOT NULL 列として定義されていれば、この WHERE 句は必要ありません。 5-22 Oracle Database グローバリゼーション・サポート・ガイド 言語の文字列検索 例 : フランス語の言語索引の設定 次の例では、フランス語の言語索引の設定方法を示します。ALTER SESSION 文を使用する かわりに、NLS_SORT をクライアントの環境変数として設定することもできます。 ALTER SESSION SET NLS_SORT='FRENCH'; ALTER SESSION SET OPTIMIZER_MODE = FIRST_ROWS; CREATE INDEX test_idx ON test3(NLSSORT(col, 'NLS_SORT=FRENCH')); SELECT * FROM test3 ORDER BY col; ALTER SESSION SET NLS_COMP=ANSI; SELECT * FROM test3 WHERE col > 'JJJ'; 言語の文字列検索 検索とソートは関連するタスクです。業務を適切に行うには、言語的に意味のある順序で データを編成して処理する必要があります。言語的に意味のある方法によるデータの検索と 照合は、適用されるソート順序に依存します。たとえば、c より後で f より前の文字列すべ てを検索すると、NLS_SORT の値に応じて異なる結果が生成されます。ASCII バイナリ・ ソートでは、d または e で始まる文字列が検出されますが、大文字の D や E または ê のよう な発音区別記号付き e などで始まる項目は除外されます。アクセントを区別しないバイナ リ・ソートを適用すると、d、D および Ê や ê などのアクセント付き e で始まる文字列がす べて戻されます。NLS_SORT を XSPANISH に設定して同じ検索を適用した場合は、ch で始 まる文字列も戻されます。これは、従来のスペイン語では ch が c と d の間をソートする複 合文字として扱われるためです。この章では、Oracle のソートの種類と、各ソートが SQL および SQL 正規表現による文字列検索に与える影響について説明します。 関連項目 : ■ 5-8 ページ「言語ソート機能」 ■ 5-24 ページ「多言語環境での SQL 正規表現」 言語ソートと文字列検索 5-23 多言語環境での SQL 正規表現 多言語環境での SQL 正規表現 正規表現は、テキスト本体に含まれる文字列のパターンを識別する強力な方法を提供しま す。正規表現の用途には、San Francisco のような文字列の単純検索や、すべての URL を抽出する複雑なタスク、さらに 2 文字目に母音を含むすべての単語の検索などのタスクが あります。SQL と PL/SQL は、Oracle Database 10g の正規表現をサポートしています。 従来の正規表現エンジンは、英語のテキストのみを処理するように設計されていました。た だし、正規表現の実装には、西欧のテキストとはまったく異なる特性を持った多様な言語を 含めることができます。Oracle の正規表現の実装は、Unicode 正規表現ガイドラインに基づ いています。REGEXP SQL 関数は、データベース・キャラクタ・セットおよび各国語キャラ クタ・セットとしてサポートされるキャラクタ・セットをすべて処理します。さらに、 Oracle では、多言語データの照合に関する固有の言語要件を処理するために、POSIX の正規 表現構成メンバーの照合機能が拡張されます。 次の項では、言語依存演算子の Oracle 拡張について説明します。 ■ 正規表現での文字範囲 [x-y] ■ 正規表現での照合要素デリミタ [. .] ■ 範囲式での文字クラス [: :] ■ 範囲式での同値化クラス [= =] ■ 例 : 正規表現 関連項目 : ■ ■ 正規表現の構文の詳細は、 『Oracle Database アプリケーション開発者 ガイド - 基礎編』を参照してください REGEX SQL 関数の詳細は、 『Oracle Database SQL リファレンス』を参 照してください。 5-24 Oracle Database グローバリゼーション・サポート・ガイド 多言語環境での SQL 正規表現 正規表現での文字範囲 [x-y] POSIX 規格では、正規表現での範囲には、現行ロケールの言語定義による範囲の始点から終 点までの照合要素がすべて含まれます。したがって、正規表現の範囲はバイト値の範囲では なく言語上の範囲を意味します。これは、バイト値の範囲はプラットフォームに依存し、エ ンド・ユーザーが文字のバイト値の順序を知っているとは思われないためです。範囲式のセ マンティクスは、キャラクタ・セットから独立させる必要があります。これは、[a-d] など の範囲には、a ~ d のすべての文字、これらの文字に発音区別記号が付いたもの、従来のス ペイン語における ch のように 1 文字としてソートされる特殊ケースの照合要素が含まれる ことを意味します。 Oracle では、NLS_SORT パラメータで指定された範囲式が解析され、指定の範囲に含まれる 照合要素が判別されます。次に例を示します。 Expression: NLS_SORT: Does not match: NLS_SORT: Matches: [a-d]e BINARY cheremoya XSPANISH >>che<<remoya 正規表現での照合要素デリミタ [. .] この構成メンバーは、照合要素を区切るために POSIX 規格により導入されています。照合 照合 要素とは照合単位であり、ほとんどの場合は 1 文字に相当します。ただし、言語によって 要素 は、照合順序により 2 文字以上が 1 つの照合要素として定義される場合があります。従来の 正規表現構文では、ユーザーは複数文字による照合要素が関係する範囲を定義できません。 たとえば、ch は 2 つの異なる文字として解析されるため、a ~ ch は範囲として定義できま せん。 照合要素デリミタ [. .] を使用すると、複数文字による照合要素と他の要素を区切ること ができます。たとえば、範囲 a ~ ch は、[a-[.ch.]] として記述できます。また、1 文字 の照合要素を区切る場合にも使用できます。定義済の照合要素でない複数言語による順序を [. .] で囲むと、正規表現ではセマンティック・エラーとみなされます。たとえば、ab が 定義済の複数文字による照合要素でない場合、[.ab.] は無効とみなされます。 範囲式での文字クラス [: :] 英語の正規表現では、範囲式を使用して文字クラスを示すことができます。たとえば、 [a-z] を使用すると任意の小文字を指定できます。ただし、英語以外の正規表現では、その 言語の照合順序で a が最初の小文字で z が最後の小文字でなければ、このアプローチを使用 すると不正確になります。 POSIX 規格では、明示的な文字クラスを移植性のある方法で指定できるように、新しい構文 要素が導入されています。[: :] 構文は、特定の文字クラスに属しているキャラクタ・セッ トを示します。文字クラス定義は、キャラクタ・セットの分類データに基づきます。 言語ソートと文字列検索 5-25 多言語環境での SQL 正規表現 範囲式での同値化クラス [= =] Oracle は、POSIX 規格で推奨される [= =] 構文を介して同値化クラスもサポートしていま す。同値化クラス 同値化クラスは、ベース文字とそのすべてのアクセント付きバージョンで構成されま 同値化クラス す。たとえば、同値化クラス [=a=] は、ä および â と一致します。パフォーマンス上の理由 で、現行の実装では Unicode の複合形式と分解形式の照合はサポートされません。たとえ ば、ä(a ウムラウト)は、ウムラウトが続く a とは一致しません。 例 : 正規表現 次の例に、正規表現の一致を示します。 例 5-7 NLS_SORT 値を使用した大 / 小文字を区別しない一致 Oracle 正規表現の一致では、大 / 小文字区別の有無は、NLS_SORT 初期化パラメータとラン タイム照合オプションの 2 つのレベルで決定されます。REGEXP 関数は、デフォルトで NLS_SORT の値から大 / 小文字区別の動作を継承します。この値は、ランタイム照合オプ ション 'c'(大小文字区別あり)または 'i'(大 / 小文字区別なし)で明示的に上書きする こともできます。 Expression: catalog(ue)? NLS_SORT: GENERIC_M_CI Matches: >>Catalog<< >>catalogue<< >>CATALOG<< Oracle SQL 構文は、次のとおりです。 SQL> ALTER SESSION SET NLS_SORT='GENERIC_M_CI'; SQL> SELECT col FROM test WHERE REGEXP_LIKE(col,'catalog(ue)?'): 例 5-8 ランタイム照合オプションで上書きされた大 / 小文字区別の有無 Expression: catalog(ue)? NLS_SORT: GENERIC_M_CI Match option: 'c' Matches: >>catalogue<< Does not match: Catalog CATALOG Oracle SQL 構文は、次のとおりです。 SQL> ALTER SESSION SET NLS_SORT='GENERIC_M_CI'; SQL> SELECT col FROM test WHERE REGEXP_LIKE(col,'catalog(ue)?,'c'); 5-26 Oracle Database グローバリゼーション・サポート・ガイド 多言語環境での SQL 正規表現 例 5-9 照合要素演算子 [..] を使用した照合 Expression: [^-a-[.ch.]]+ Matches: >>driver<< Does not match: cab Oracle SQL 構文は、次のとおりです。 SQL> SELECT col FROM test WHERE REGEXP_LIKE(col,'[^-a-[.ch.]]+'); 例 5-10 文字クラス演算子 [::] を使用した照合 この式では、小文字 6 文字からなる文字列が検索されます。アクセント付き文字は、小文字 として一致することに注意してください。 Expression: [[:lower:]]{6} Database character set: WE8ISO1559P1 Matches: >>maître<< >>mòbile<< >>pájaro<< >>zurück<< Oracle SQL 構文は、次のとおりです。 SQL> SELECT col FROM test WHERE REGEXP_LIKE(col,'[[:lower:]]{6}'); 例 5-11 ベース文字演算子 [==] を使用した照合 Expression: r[[=e=]]sum[[=e=]] Matches: >>resume<< >>résumé<< >>résume<< >>resumé<< Oracle SQL 構文は、次のとおりです。 SQL> SELECT col FROM test WHERE REGEXP_LIKE(col,r[[=e=]]sum[[e]]'); 関連項目 : ■ ■ 正規表現の構文の詳細は、『Oracle Database アプリケーション開発者 ガイド - 基礎編』を参照してください REGEX SQL 関数の詳細は、『Oracle Database SQL リファレンス』を参 照してください。 言語ソートと文字列検索 5-27 多言語環境での SQL 正規表現 5-28 Oracle Database グローバリゼーション・サポート・ガイド 6 Unicode を使用した多言語データベースの サポート この章では、Oracle データベース環境での Unicode の使用方法について説明します。この 章の内容は、次のとおりです。 ■ Unicode の概要 ■ Unicode の概要 ■ Unicode ソリューションのデータベースへの実装 ■ Unicode の事例 ■ 複数言語サポートのためのデータベース・スキーマ設計 Unicode を使用した多言語データベースのサポート 6-1 Unicode の概要 Unicode の概要 同じアプリケーションやデータベース内で多数の異なる言語を処理することは、長い間複雑 で困難な処理でした。既存の文字エンコーディングの制約を克服するために、1980 年代の後 半、複数の組織がグローバル・キャラクタ・セットの作成に着手しました。グローバル・ キャラクタ・セットの必要性は、1990 年代中頃に入り、World Wide Web の発展とともにま すます大きくなりました。インターネットの普及によってビジネスの形態が変化し、グロー バル・マーケットに重点が置かれるようになったため、ユニバーサル・キャラクタ・セット が重要な必要条件になってきました。このグローバル・キャラクタ・セットは、次の条件を 満たす必要があります。 ■ 現在使用されているすべての主要文字を網羅していること。 ■ レガシー・データや実装をサポートしていること。 ■ 1 つのアプリケーションの 1 つの実装で、世界中で使用できるような単純なキャラクタ・ セットであること。 また、グローバル・キャラクタ・セットには次の機能も必要です。 ■ 多言語ユーザーや組織のサポート ■ 国際規格への準拠 ■ 世界規模でのデータ交換 このグローバル・キャラクタ・セットが、現在世界中で使用されている Unicode と呼ばれる キャラクタ・セットです。 Unicode の概要 Unicode とは、エンコードされたユニバーサル・キャラクタ・セットのことです。このセッ トを使用すると、1 つのキャラクタ・セットを使用して任意の言語の情報を格納できます。 Unicode には、プラットフォーム、プログラムまたは言語に関係なく、すべての文字に対す る一意のコード値が用意されている。 多くのソフトウェアとハードウェアのベンダーが Unicode 規格を採用しています。また、多 くのオペレーティング・システムやブラウザがサポートしています。Unicode は、XML、 Java、JavaScript、LDAP および WML などの規格には必須です。また、ISO/IEC 10646 規 格とも同期化されています。 オラクル社が Unicode をサポートしたのは、バージョン 7 のデータベース・キャラクタ・ セットが最初です。Oracle Database 10g では、Unicode のサポートが拡張されています。 Oracle Database 10g では、Unicode 3.2 をサポートしています。 関連項目 : Unicode 規格の詳細は、http://www.unicode.org を参照 してください。 6-2 Oracle Database グローバリゼーション・サポート・ガイド Unicode の概要 この項の内容は、次のとおりです。 ■ 補助文字 ■ Unicode エンコーディング ■ Oracle による Unicode のサポート 補助文字 Unicode の最初のバージョンは 16 ビットの固定幅エンコーディングで、各文字のエンコー ディングに 2 バイトを使用していた。このため、65,536 文字を表現できた。しかし、サポー トを必要とする文字数が増え、特に中国語、日本語および韓国語市場では、追加の CJK 表意 文字のサポートが必要となりました。 Unicode 3.2 では、このニーズを満たすために補助文字が定義されています。2 つの 16 ビッ ト・コード・ポイント(補助文字とも呼ばれる)を使用して、1 つの文字が表現されます。 このため、さらに 1,048,576 文字の定義が可能です。Unicode 3.2 規格では、45,960 文字の補 助文字が定義されています。 補助文字の追加によって Unicode は複雑度を増しましたが、同じ構成で複数の異なるエン コーディングを管理するよりは単純です。 Unicode エンコーディング Unicode 3.2 では、文字は UTF-8、UCS-2 および UTF-16 という方法でエンコードされます。 Unicode エンコーディング間の変換は、Unicode 規格に定義されている単純なビット単位操 作です。 この項の内容は、次のとおりです。 ■ UTF-8 エンコーディング ■ UCS-2 エンコーディング ■ UTF-16 エンコーディング ■ 例 : UTF-16、UTF-8 および UCS-2 エンコーディング UTF-8 エンコーディング UTF-8 とは、Unicode の 8 ビット・エンコーディングのことです。これは可変幅エンコー ディングであり、ASCII の完全なスーパーセット 完全なスーパーセットです。これは、ASCII キャラクタ・セット 完全なスーパーセット の各文字を、UTF-8 で同じコード・ポイント値とともに使用できることを意味します。 UTF-8 エンコーディングでは、1 つの Unicode 文字を、1 バイト、2 バイト、3 バイトまたは 4 バイトで表すことができる。ヨーロッパ言語の文字は、1 バイトまたは 2 バイトで表す。 ほとんどのアジア言語の文字は、3 バイトで表す。補助文字は、4 バイトで表す。 Unicode を使用した多言語データベースのサポート 6-3 Unicode の概要 UTF-8 は UNIX プラットフォーム上でサポートされる Unicode エンコーディングであり、 HTML とほとんどのインターネット・ブラウザで使用されてます。Windows や Java など、 他の環境では、UCS-2 エンコーディングが使用されています。 UTF-8 の利点は、次のとおりです。 ■ ASCII の完全なスーパーセットであるため、ヨーロッパ言語の記憶要件が小規模です。 ■ ASCII ベースのキャラクタ・セットと UTF-8 の間の移行が容易です。 関連項目 : ■ 6-3 ページ「補助文字」 ■ B-2 ページの表 B-2「UTF-8 文字コード用の Unicode 文字コード範囲」 UCS-2 エンコーディング UCS-2 は固定幅の 16 ビット・エンコーディングで、各文字は 2 バイトです。この Unicode エンコーディングは、Java と Microsoft Windows NT 4.0 で使用されています。UCS-2 では Unicode 3.0 に定義されている文字がサポートされるため、補助文字のサポート機能はあり ません。 UTF-8 と比較した UCS-2 の利点は、次のとおりです。 ■ すべての文字が 2 バイトであるため、アジア言語の場合は記憶要件がさらに小規模です。 ■ 文字が固定幅であるため、文字列の処理が高速です。 ■ Java および Microsoft クライアントとの優れた互換性があります。 関連項目 : 6-3 ページ「補助文字」 UTF-16 エンコーディング UTF-16 エンコーディングとは、Unicode の 16 ビット・エンコーディングのことです。 UTF-16 は、UCS-2 の拡張です。これは、各補助文字に 2 つの UCS-2 コード・ポイントを使 用することで Unicode 3.2 に定義されている補助文字をサポートするためです。UTF-16 は、 UCS-2 の完全なスーパーセットです。 UTF-16 では、1 文字を 2 バイトか 4 バイトで表すことができます。ヨーロッパ言語とほとん どのアジア言語の文字は、ともに 2 バイトで表します。補助文字は、4 バイトで表す。 UTF-16 は、Microsoft Windows 2000 で使用されている主要 Unicode エンコーディングで す。 UTF-8 と比較した UTF-16 の利点は、次のとおりです。 ■ ■ 一般に使用されるアジア言語の文字のほとんどは 2 バイトで表されるため、アジア言語 の場合は記憶要件がさらに小規模です。 Java および Microsoft クライアントとの優れた互換性があります。 6-4 Oracle Database グローバリゼーション・サポート・ガイド Unicode の概要 関連項目 : ■ 6-3 ページ「補助文字」 ■ B-2 ページの表 B-1「UTF-16 文字コード用の Unicode 文字コード範囲」 例 : UTF-16、 、UTF-8 および UCS-2 エンコーディング 図 6-1 に、UTF-16、UTF-8 および UCS-2 の各エンコーディングの文字とその文字コードを 示します。最後の文字はト音記号(音楽記号)で、補助文字として Unicode 3.2 規格に追加 されました。 図 6-1 UTF-16、 、UTF-8 および UCS-2 エンコーディングの例 Unicode を使用した多言語データベースのサポート 6-5 Unicode の概要 Oracle による Unicode のサポート オラクル社が Unicode をサポートしたのは、バージョン 7 のデータベース・キャラクタ・ セットが最初です。表 6-1 に、Oracle データベース・サーバーでサポートされている Unicode キャラクタ・セットを示します。 表 6-1 Oracle データベース・サーバーでサポートされている Unicode キャラクタ・セット キャラクタ・ セット サポートしている RDBMS の Unicode リリース エンコーディング Unicode のバージョン データベース・ キャラクタ・ 各国語キャラクタ・ セット セット AL24UTFFSS 7.2 - 8i UTF-8 1.1 可能 不可 UTF8 8.0 - 10g UTF-8 Oracle リリース 8.0 ~ Oracle8i リリース 8.1.6 の場合 : 2.1 可能 可能(Oracle9i および Oracle Database 10g のみ) 可能 不可 可能 不可 不可 可能 Oracle8i リリース 8.1.7 以上の場合 : 3.0 UTFE 8.0 - 10g UTF-EBCDIC Oracle8i リリース 8.0 ~ 8.1.6 の場合 : 2.1 Oracle8i リリース 8.1.7 以上の場合 : 3.0 AL32UTF8 9i - 10g UTF-8 Oracle9i リリース 1 (9.0.1)の場合 : 3.0 Oracle9i リリース 2 (9.2)の場合 : 3.1 Oracle Database 10g リリース 1 の場合 : 3.2 AL16UTF16 9i - 10g UTF-16 Oracle9i リリース 1 (9.0.1)の場合 : 3.0 Oracle9i リリース 2 (9.2)の場合 : 3.1 Oracle Database 10g リリース 1 の場合 : 3.2 6-6 Oracle Database グローバリゼーション・サポート・ガイド Unicode ソリューションのデータベースへの実装 Unicode ソリューションのデータベースへの実装 次の 2 つの方法で Unicode 文字を Oracle データベースに格納できます。 Unicode データベースを作成すると、UTF-8 エンコードされた文字を SQL CHAR データ型 (CHAR、VARCHAR2、CLOB および LONG)として格納できます。 Unicode サポートを段階的に実装する場合、または特定の列の多言語データのみをサポート する必要がある場合、Unicode データは SQL NCHAR データ型(NCHAR、NVARCHAR2 および NCLOB)の UTF-16 または UTF-8 エンコーディング方式のいずれかで格納できます。SQL NCHAR データ型は、Unicode データの格納専用に使用されるため、Unicode データ型と呼ば れます。 注意 : Unicode データベース・ソリューションは、Unicode データ型ソ リューションと組み合せることができます。 次の項で、2 つの Unicode ソリューションの使用方法とその選択方法を説明します。 ■ Unicode データベースを使用した多言語サポートの有効化 ■ Unicode データ型を使用した多言語サポートの有効化 ■ Unicode データベースと Unicode データ型のソリューションの選択方法 ■ データベースおよびデータ型ソリューションに関する Unicode キャラクタ・セットの 比較 Unicode データベースを使用した多言語サポートの有効化 データベース・キャラクタ・セットでは、SQL CHAR データ型の他に、表名、列名および SQL 文などのメタデータに使用するエンコーディングが指定されます。Unicode データベー スとは、UTF-8 をデータベース・キャラクタ・セットとして持つデータベースのことです。 UTF-8 エンコーディングを実装している Oracle キャラクタ・セットは 3 つあります。最初 の 2 つは、ASCII ベースのプラットフォーム用に設計されており、3 つ目は、EBCDIC プ ラットフォーム上で使用する必要があります。 ■ AL32UTF8 AL32UTF8 キャラクタ・セットでは、最新バージョンの Unicode 規格をサポートしてい ます。このキャラクタ・セットでは、各文字は 1 バイト、2 バイトまたは 3 バイトでエ ンコードされ、補助文字には 4 バイトが必要です。ASCII ベースのプラットフォーム 用。 Unicode を使用した多言語データベースのサポート 6-7 Unicode ソリューションのデータベースへの実装 ■ UTF8 UTF8 キャラクタ・セットは、文字を 1 バイト、2 バイトまたは 3 バイトでエンコード します。ASCII ベースのプラットフォーム用。 Oracle8i リリース 8.1.7 以上は UTF8 キャラクタ・セットで Unicode 3.0 がサポートされ ており、Oracle データベース・サーバーの将来のリリースでも引き続きサポートされま す。Unicode 3.1 では、特定の補助文字にコード・ポイントが割り当てられていなかっ たが、Unicode 3.0 では補助文字用のコード・ポイント範囲が割り当てられていた。 UTF8 データベースに補助文字が挿入されても、データベース内のデータは破損しませ ん。補助文字は、6 バイトを占める 2 つの別個のユーザー定義文字として処理されます。 データベース・キャラクタ・セット内の補助文字を全面的にサポートするために、 AL32UTF8 に切り替えることをお薦めします。 ■ UTFE UTFE キャラクタ・セットは EBCDIC プラットフォーム用です。このキャラクタ・セッ トは ASCII プラットフォーム上での UTF8 に似ていますが、文字は 1 バイト、2 バイ ト、3 バイトおよび 4 バイトでエンコードされます。補助文字は 2 つの 4 バイト文字と して変換されます。 例 6-1 Unicode キャラクタ・セットを使用したデータベースの作成 AL32UTF8 キャラクタ・セットを使用してデータベースを作成するには、CREATE DATABASE 文に CHARACTER SET AL32UTF8 句を使用します。次に例を示します。 CREATE DATABASE sample CONTROLFILE REUSE LOGFILE GROUP 1 ('diskx:log1.log', 'disky:log1.log') SIZE 50K, GROUP 2 ('diskx:log2.log', 'disky:log2.log') SIZE 50K MAXLOGFILES 5 MAXLOGHISTORY 100 MAXDATAFILES 10 MAXINSTANCES 2 ARCHIVELOG CHARACTER SET AL32UTF8 NATIONAL CHARACTER SET AL16UTF16 DATAFILE 'disk1:df1.dbf' AUTOEXTEND ON, 'disk2:df2.dbf' AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED DEFAULT TEMPORARY TABLESPACE temp_ts UNDO TABLESPACE undo_ts SET TIME_ZONE = '+02:00'; 注意 : データベース・キャラクタ・セットは、データベースの作成時に 指定します。 6-8 Oracle Database グローバリゼーション・サポート・ガイド Unicode ソリューションのデータベースへの実装 Unicode データ型を使用した多言語サポートの有効化 データベースに Unicode データを格納する代替方法は、SQL NCHAR データ型(NCHAR、 NVARCHAR、NCLOB)を使用することです。データベース・キャラクタ・セットの定義方法 に関係なく、これらのデータ型の列に Unicode 文字を格納できます。NCHAR データ型は Unicode データ型専用です。つまり、このデータ型は、Unicode としてエンコードされた データを格納します。 Oracle9i より前のリリースでは、NCHAR データ型は、パフォーマンスを向上させるように設 計された固定幅のアジア言語キャラクタ・セットをサポートしていました。固定幅キャラク タ・セットの例に、JA16SJISFIXED および ZHT32EUCFIXED があります。Oracle9i までは、 Unicode キャラクタ・セットは各国語キャラクタ・セットとしてサポートされていませんで した。 NVARCHAR2 と NCHAR のデータ型を使用すると、表を作成できます。NCHAR 列と NVARCHAR2 列に指定する列の長さは、次のように常にバイト数ではなく文字数です。 CREATE TABLE product_information ( product_id NUMBER(6) , product_name NVARCHAR2(100) , product_description VARCHAR2(1000)); SQL NCHAR データ型で使用するエンコーディングは、データベース用に指定される各国語 キャラクタ・セットです。次の Oracle キャラクタ・セットのいずれかを、各国語キャラク タ・セットとして指定できます。 ■ AL16UTF16 これは、SQL NCHAR データ型のデフォルトのキャラクタ・セットです。このキャラク タ・セットは、Unicode データを UTF-16 エンコーディングでエンコードします。また、 4 バイトとして格納される補助文字をサポートします。 ■ UTF8 SQL NCHAR データ型に UTF8 を指定すると、SQL データ型で格納されているデータは、 UTF-8 エンコーディングになります。 NATIONAL CHARACTER SET 句を指定した CREATE DATABASE 文を使用してデータベース を作成する場合は、SQL NCHAR データ型に各国語キャラクタ・セットを指定できます。次 の文では、データベース・キャラクタ・セットとして WE8ISO8859P1 を持ち、各国語キャ ラクタ・セットとして AL16UTF16 を持つデータベースを作成します。 Unicode を使用した多言語データベースのサポート 6-9 Unicode ソリューションのデータベースへの実装 例 6-2 各国語キャラクタ・セットを使用したデータベースの作成 CREATE DATABASE sample CONTROLFILE REUSE LOGFILE GROUP 1 ('diskx:log1.log', 'disky:log1.log') SIZE 50K, GROUP 2 ('diskx:log2.log', 'disky:log2.log') SIZE 50K MAXLOGFILES 5 MAXLOGHISTORY 100 MAXDATAFILES 10 MAXINSTANCES 2 ARCHIVELOG CHARACTER SET WE8ISO8859P1 NATIONAL CHARACTER SET AL16UTF16 DATAFILE 'disk1:df1.dbf' AUTOEXTEND ON, 'disk2:df2.dbf' AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED DEFAULT TEMPORARY TABLESPACE temp_ts UNDO TABLESPACE undo_ts SET TIME_ZONE = '+02:00'; Unicode データベースと Unicode データ型のソリューションの選択方法 データベースに対する適切な Unicode ソリューションを選択するには、次の問題を考慮して ください。 ■ ■ ■ ■ ■ プログラミング環境 : アプリケーションで使用されている主要なプログラミング言語は 何か。これらのプログラミング言語は、どのように Unicode をサポートしているか。 移行の容易さ : Unicode ソリューションを利用するために、データとアプリケーション を移行することに問題はないか。 パフォーマンス : データベースで Unicode を使用するために許容できるパフォーマンス 上のオーバーヘッドはどの程度か。 データの種類 : データの大部分は、アジア言語、あるいはヨーロッパ言語か。多言語ド キュメントを LOB 列に格納する必要があるか。 アプリケーションの種類 : 実装しているアプリケーションの種類は何か。パッケージ・ アプリケーションか、あるいはカスタマイズしたエンド・ユーザー・アプリケーション か。 この項では、Unicode データベース・ソリューションまたは Unicode データ型ソリューショ ンを選択する場合の一般的なガイドラインを説明します。最終的な決定は、主として各自の 正確な環境と要件に基づいて行います。この項の内容は、次のとおりです。 ■ Unicode データベースの使用が必要な状況 ■ Unicode データ型の使用が必要な状況 6-10 Oracle Database グローバリゼーション・サポート・ガイド Unicode ソリューションのデータベースへの実装 Unicode データベースの使用が必要な状況 表 6-2 に、Unicode データベースを使用する状況を示します。 表 6-2 Unicode データベースの使用 状況 説明 Java または PL/SQL に 対する簡単なコード移行が 必要な場合 既存のアプリケーションが主として Java と PL/SQL で作成されており、複数言語のサ ポートに必要なコード変更を最小限にすることが最優先の課題である場合は、Unicode データベース・ソリューションを使用できます。データの格納に使用するデータ型が SQL CHAR データ型のままである場合は、これらの列にアクセスする Java と PL/SQL のコードを変更する必要はありません。 多言語データを均等に分散 した場合 多言語データが既存のスキーマ表に均等に分散されていて、多言語データが格納されて いる表が確認できない場合には、Unicode データベースを使用する必要があります。 これは、この Unicode データベースでは、各列に格納されているデータの種類を識別 する必要がないためです。 Unicode データベースを使用する必要があります。SQL 文と PL/SQL コードは、処理 SQL 文と PL/SQL コード に Unicode データが含まれ 前にデータベース・キャラクタ・セットに変換されます。SQL 文と PL/SQL コードに データベース・キャラクタ・セットに変換できない文字が含まれている場合、その文字 ている場合 は失われます。SQL 文で Unicode データを使用する一般的な場所は、文字列リテラル にあります。 多言語ドキュメントを BLOB 形式で格納し、 Oracle Text を内容検索に 使用する場合 Unicode データベースを使用する必要があります。BLOB データは、Oracle Text による 索引付けが行われる前に、データベース・キャラクタ・セットに変換されます。データ ベース・キャラクタ・セットが UTF8 でない場合は、ドキュメントにデータベース・ キャラクタ・セットに変換できない文字が含まれていると、データが失われます。 Unicode を使用した多言語データベースのサポート 6-11 Unicode ソリューションのデータベースへの実装 Unicode データ型の使用が必要な状況 表 6-3 に、Unicode データ型を使用する状況を示します。 表 6-3 Unicode データ型の使用 状況 説明 多言語サポートを段階的に 追加する場合 キャラクタ・セットを移行せずに、Unicode サポートを既存のデータベースに追加する 場合は、Unicode データの格納に Unicode データ型を使用することを考慮してくださ い。SQL NCHAR データ型の列を既存の表または新しい表に追加すると、複数言語を段 階的にサポートできます。 パッケージ・アプリケー ションを作成する場合 顧客に販売するパッケージ・アプリケーションを作成している場合は、SQL NCHAR データ型を使用してアプリケーションを作成できます。SQL NCHAR データ型は信頼性 のある Unicode データ型であり、データは常に Unicode で格納され、データ長は常に UTF-16 コードの単位で指定されています。その結果、アプリケーションのテストは 1 回のみですみます。アプリケーションは、任意のデータベース・キャラクタ・セットを 持つ顧客のデータベースで稼働します。 シングルバイトのデータ ベース・キャラクタ・ セットを使用してパフォー マンスを改善する場合 パフォーマンスの向上が主な優先事項である場合は、シングルバイトのデータベース・ キャラクタ・セットを使用して、Unicode データを SQL NCHAR データ型で格納するこ とを考慮してください。UTF8 などのマルチバイトのデータベース・キャラクタ・セッ トを使用するデータベースでは、パフォーマンス上のオーバーヘッドが発生します。 Windows クライアントで UTF-16 のサポートが 必要な場合 アプリケーションが Windows 上で稼働する Visual C/C++ や Visual Basic で作成され ている場合は、SQL NCHAR データ型を使用できます。SQL NCHAR データ型の UTF-16 データを、Visual C/C++ の wchar_t バッファおよび Visual Basic の string バッファ に格納するのと同じ方法で格納できます。クライアント・アプリケーションでのバッ ファのオーバーフローは回避できます。これは、wchar_t データ型と string データ 型の長さは、データベースの SQL NCHAR データ型の長さと一致しているためです。 注意 : Unicode データベースと Unicode データ型は併用できます。 6-12 Oracle Database グローバリゼーション・サポート・ガイド Unicode ソリューションのデータベースへの実装 データベースおよびデータ型ソリューションに関する Unicode キャラクタ・ セットの比較 Oracle には、データベースに Unicode 文字を格納するためのソリューションが 2 つ用意さ れています。Unicode データベース・ソリューションと Unicode データ型ソリューションで す。Unicode データベース・ソリューション、Unicode データ型ソリューションまたはその 組合せを選択した後は、Unicode データベースまたは Unicode データ型で使用するキャラク タ・セットを決定します。 表 6-4 に、Unicode データベース・ソリューションの様々なキャラクタ・セットのメリット とデメリットを示します。Unicode データベース・キャラクタ・セットを使用できる Oracle キャラクタ・セットは、AL32UTF8、UTF8 および UTFE です。 表 6-4 Unicode データベース・ソリューション用キャラクタ・セットのメリットとデメリット データベース・ キャラクタ・ セット メリット AL32UTF8 ■ ■ UTF8 ■ ■ UTFE ■ ■ ■ デメリット 補助文字は 4 バイトで格納され、クライ アント設定が UTF-8 の場合は補助文字の 取得時と挿入時にデータ変換は行われま せん。 AL32UTF8 では、補助文字の格納に必要 なディスク領域が UTF8 の場合に比較し て少なくなります。 SQL CHAR 型の長さは、UCS-2 コード・ ポイント数で指定できます。 ■ ■ ■ データが同じ補助文字で構成されている 場合、SQL CHAR 列のバイナリ順序は、 SQL NCHAR 列のバイナリ順序と常に同じ です。その結果、CHAR 列と NCHAR 列に は、同じ文字列に対して同じソートがあ ります。 これは、EBCDIC プラットフォーム用の 唯一の Unicode キャラクタ・セットで す。 SQL CHAR 型の長さは、UCS-2 コード・ ポイント数で指定できます。 データが同じ補助文字で構成されている 場合、SQL CHAR 列のバイナリ順序は、 SQL NCHAR 列のバイナリ順序と常に同じ です。その結果、CHAR 列と NCHAR 列に は、同じ文字列に対して同じソートがあ ります。 ■ ■ SQL CHAR 型の長さは、補助文字の UCS-2 コー ド・ポイント数で指定できません。補助文字は、 この規格の 2 コード・ポイントではなく、1 コード・ポイントとして処理されます。 データが補助文字で構成されている場合、SQL CHAR 列のバイナリ順序は、SQL NCHAR 列のバ イナリ順序と同じではありません。その結果、 CHAR 列と NCHAR 列では、同じ文字列に対して 常に同じようにソートされるとはかぎりません。 補助文字は、Unicode 3.2 で定義された 4 バイト ではなく、6 バイトとして格納されます。その 結果、クライアント設定が UTF-8 の場合は、補 助文字のデータ変換が必要になります。 補助文字は、Unicode 規格で定義された 5 バイ トではなく、8 バイト(2 つの 4 バイト順序)と して格納されます。その結果、この補助文字に はデータ変換が必要になります。 UTFE は、Unicode 規格の標準エンコーディング ではありません。その結果、標準 UTF-8 エン コーディングが必要なクライアントは、データ の取得時と挿入時に UTFE から標準エンコー ディングへのデータ変換を実行する必要があり ます。 Unicode を使用した多言語データベースのサポート 6-13 Unicode ソリューションのデータベースへの実装 表 6-5 に、Unicode データ型ソリューションの様々なキャラクタ・セットのメリットとデメ リットを示します。各国語キャラクタ・セットに使用できる Oracle キャラクタ・セットは、 AL16UTF16 および UTF8 です。デフォルトは AL16UTF16 です。 表 6-5 Unicode データ型ソリューション用キャラクタ・セットのメリットとデメリット 各国語キャラクタ・ セット メリット デメリット AL16UTF16 ■ ■ ■ ■ UTF8 ■ ■ AL16UTF16 でのアジア言語データは通常、 UTF8 のデータに比較して小型です。その結 果、データベースに格納されている多言語 データの大部分がアジア言語データである場 合は、ディスク領域が節減され、ディスクの I/O が削減されます。 一般的に、AL16UTF16 キャラクタ・セットで エンコードされた文字列の処理は、UTF8 でエ ンコードされた文字列より高速です。これは、 Oracle では、AL16UTF16 でエンコードされた 文字列のほとんどの文字が固定幅文字として 処理されるためです。 ■ ヨーロッパ言語の ASCII データでは、UTF8 に比較して、AL16UTF16 での格納に大き なディスク領域が必要です。データのほと んどがヨーロッパ言語の場合は、UTF8 データの場合に比較してディスク領域の使 用量が多くなります。 NCHAR 列と NVARCHAR2 列の最大長は、そ れぞれ 1000 文字と 2000 文字です。これ は、UTF8 の場合の NCHAR(2000 文字)と NVARCHAR2(4000 文字)に比較して少な くなります。 NCHAR 列と NVARCHAR2 列の最大長は、それ ぞれ 1000 文字と 2000 文字に制限されていま す。データは固定幅であるため、長さが保証 されています。 UTF8 でのヨーロッパ言語データは通常、 AL16UTF16 でのデータに比較して小型です。 その結果、データベースに格納されている多 言語データの大部分がヨーロッパ言語データ である場合、ディスク領域が節減され、応答 時間が短縮されます。 NCHAR 列と NVARCHAR2 列の最大長は、それ ぞれ 2000 文字と 4000 文字です。これは、 AL16UTF16 の場合の NCHAR(1000 文字)と NVARCHAR2(2000 文字)に比較して多くなり ます。UTF8 では、NCHAR 列と NVARCHAR2 列の最大長は大きくなりますが、UTF8 での実 際の格納サイズは、それぞれ 2000 バイトと 4000 バイトというバイト制限で拘束されてい ます。たとえば、すべての文字がシングルバ イトの場合は、NVARCHAR2 列には 4000 UTF8 文字を格納できますが、すべての文字が 3 バ イトの場合は、格納できる文字は 4000/3 文字 のみになります。 6-14 Oracle Database グローバリゼーション・サポート・ガイド ■ ■ ■ アジア言語データでは、AL16UTF16 に比 較して、UTF8 での格納に大きなディスク 領域が必要になります。データの大部分が アジア言語データの場合、ディスク領域の 使用は、キャラクタ・セットが AL16UTF16 の場合より低効率ではありま せん。 NCHAR と NVARCHAR に対して長さ制限の拡 大を指定できますが、その制限の拡大に よって指定した文字数を挿入できる保証は ありません。これは、UTF8 では可変幅の 文字を使用できるためです。 通常、UTF8 でエンコードされた文字列の 処理は、AL16UTF16 でエンコードされた 文字列より低速です。これは、UTF8 でエ ンコードされた文字列が可変幅の文字で構 成されているためです。 Unicode の事例 Unicode の事例 この項では、Unicode 文字を Oracle データベースに格納する場合の代表的な使用例を説明 します。 ■ 例 6-3「Unicode データベースを使用した Unicode ソリューション」 ■ 例 6-4「Unicode データ型を使用した Unicode ソリューション」 ■ 例 6-5「Unicode データベースと Unicode データ型を使用した Unicode ソリューション」 例 6-3 Unicode データベースを使用した Unicode ソリューション Java アプリケーションを実行しているある米国の企業では、アプリケーションの次のリリー スでドイツ語とフランス語のサポートを追加しようとしています。その後、日本語のサポー トを追加する予定です。この会社には、現在次のようなシステム構成があります。 ■ 既存のデータベースは、US7ASCII のデータベース・キャラクタ・セットです。 ■ 既存のデータベースの全文字データは、ASCII 文字で構成されています。 ■ データベースでは、PL/SQL ストアド・プロシージャが使用されています。 ■ データベースは、およそ 300 GB です。 ■ 夜間の停止時間は 4 時間です。 この場合、代表的なソリューションは、データベース・キャラクタ・セットに UTF8 を選択 します。その理由は、次のとおりです。 ■ ■ ■ データベースが非常に大規模で、予定されている停止時間が短いこと。Unicode への データベースの移行の高速化が不可欠です。データベースが US7ASCII であるため、 データベースの Unicode サポートを有効化する最も簡単で迅速な方法は、ALTER DATABASE 文を発行して、データベース・キャラクタ・セットを UTF8 に切り替えるこ とです。US7ASCII は、UTF-8 のサブセットであるため、データ変換は不要です。 コードの大部分が Java と PL/SQL で記述されているため、データベース・キャラクタ・ セットの UTF8 への変更によって、既存のコードが無駄になることはないこと。 Unicode サポートはアプリケーションで自動的に有効化されます。 アプリケーションがフランス語、ドイツ語および日本語をサポートするため、補助文字 はほとんどないこと。AL32UTF8 と UTF8 の両方が適しています。 Unicode を使用した多言語データベースのサポート 6-15 Unicode の事例 例 6-4 Unicode データ型を使用した Unicode ソリューション 主として Windows プラットフォームでアプリケーションを実行しているあるヨーロッパの 企業では、Visual C/C++ で作成された新しい Windows アプリケーションを追加する必要が あります。このアプリケーションでは、日本語と中国語の顧客名をサポートするために、既 存のデータベースが使用されます。この会社には、現在次のようなシステム構成がありま す。 ■ 既存のデータベースには、WE8ISO8859P1 のデータベース・キャラクタ・セットがあり ます。 ■ 既存のデータベースの全文字データは、西ヨーロッパの文字で構成されています。 ■ データベースは、およそ 50 GB です。 代表的なソリューションでは、次のアクションが実行されます。 ■ NCHAR および NVARCHAR2 データ型を使用して Unicode 文字が格納されます。 ■ WE8ISO8859P1 がデータベース・キャラクタ・セットとして維持されます。 ■ AL16UTF16 が各国語キャラクタ・セットとして使用されます。 このソリューションを選択する理由は、次のとおりです。 ■ ■ ■ ■ ■ ■ データベース・キャラクタ・セットの WE8ISO8859P1(Latin-1 キャラクタ・セット)は UTF8 のサブセットでないため、既存のデータベースを Unicode データベースに移行す るには、データ変換が必要になること。その結果、データを UTF8 に変換するときに オーバーヘッドが発生します。 追加した言語は、新しいアプリケーションでのみサポートされること。既存のアプリ ケーションまたはスキーマに対する依存性はありません。Unicode データ型は新しいス キーマで使用し、既存のスキーマは変更しないままのほうが簡単です。 Unicode のサポートが必要なのは、顧客名の列のみであること。1つの NCHAR 列のみを 使用することで、データベース全体を移行せずに顧客の要件を満たすことができます。 サポート対象言語がほとんどアジア言語であるため、AL16UTF16 を各国語キャラクタ・ セットとして使用する必要があり、結果として、ディスク領域をより効率的に使用でき ること。 SQL NCHAR データ型の長さは文字数として定義されること。この処理方法は、 Windows C/C++ プログラムで wchar_t 文字列を使用する場合と同じです。この方法 は、プログラミングの複雑さを軽減します。 既存のスキーマを使用している既存のアプリケーションに対する影響はないこと。 6-16 Oracle Database グローバリゼーション・サポート・ガイド Unicode の事例 例 6-5 Unicode データベースと Unicode データ型を使用した Unicode ソリューション ある日本の企業では、新しい Java アプリケーションを開発する必要があります。会社では、 このアプリケーションによって、できるだけ多数の言語を長期にわたってサポートする予定 です。 ■ ■ ■ そこで、ドキュメントを現状のまま格納するために、BLOB データ型を使用して複数言 語のドキュメントを格納することに決定しました。 また、B2B でのデータ交換のためにリレーショナル・データから UTF-8 XML ドキュメ ントを生成する必要もあります。 バックエンドには、C/C++ で作成した Windows アプリケーションがあり、Oracle デー タベースにアクセスするために ODBC を使用しています。 この場合、代表的なソリューションは、データベース・キャラクタ・セットに AL32UTF8 を 使用して Unicode データベースを作成し、SQL NCHAR データ型を使用して多言語データを 格納します。各国語キャラクタ・セットは、AL16UTF16 に設定する必要があります。この ソリューションを選択する理由は、次のとおりです。 ■ ■ ■ 異なる言語のドキュメントが BLOB 形式で格納されている場合、Oracle Text では、デー タベース・キャラクタ・セットが UTF-8 キャラクタ・セットの 1 つである必要があるこ と。アプリケーションでは、リレーショナル・データを UTF-8 XML フォーマットとし て取得する可能性があるため(補助文字が 4 バイトで格納されている場合) 、AL32UTF8 をデータベース・キャラクタ・セットとして使用し、UTF-8 データの取得時または挿入 時のデータ変換を回避する必要があります。 アプリケーションが新規で、Java と Windows C/C++ の両方で作成されているため、こ の会社ではリレーショナル・データに対して SQL NCHAR データ型を使用する必要があ ること。Java と Windows の両方が UTF-16 文字のデータ型をサポートしていて、文字 列の長さは常に文字数で測定されます。 データの大部分がアジア言語の場合は、AL16UTF16 を SQL NCHAR データ型と併用する 必要があること。これは、AL16UTF16 によって、パフォーマンスと格納の効率が向上 するためです。 Unicode を使用した多言語データベースのサポート 6-17 複数言語サポートのためのデータベース・スキーマ設計 複数言語サポートのためのデータベース・スキーマ設計 複数言語をサポートするようにデータベース・スキーマを設計する場合は、Unicode ソ リューションの選択に加えて、次の問題も考慮する必要があります。 ■ 多言語データに使用する列の長さの指定 ■ 複数言語のデータの格納 ■ LOB データ型への複数言語によるドキュメントの格納 ■ 多言語ドキュメントの内容検索に使用する索引の作成 多言語データに使用する列の長さの指定 多言語データの格納に NCHAR および NVARCHAR2 データ型を使用する場合、列に指定する サイズは文字数で定義します(文字数は、Unicode のコード数を意味します)。表 6-6 に、 AL16UTF16 および UTF8 の各国語キャラクタ・セットに対する NCHAR および NVARCHAR2 データ型の最大サイズを示します。 表 6-6 データ型の最大サイズ 各国語キャラクタ・セット NCHAR データ型の 最大列サイズ NVARCHAR2 データ型の 最大列サイズ AL16UTF16 1000 文字 2000 文字 UTF8 2000 バイト 4000 バイト 多言語データの格納に CHAR および VARCHAR2 のデータ型を使用する場合、各列に指定する 最大長は、デフォルトではバイト数で指定します。データベースで、タイ語、アラビア語、 あるいは中国語や日本語などのマルチバイトの言語をサポートする必要がある場合は、 CHAR、VARCHAR および VARCHAR2 の各列の最大サイズを拡張する必要があります。これ は、これらの言語を UTF8 または AL32UTF8 でエンコードするためのバイト数が、英語や西 ヨーロッパの言語に比較してかなり多いためです。たとえば、タイ語キャラクタ・セットの 1 つのタイ文字は、UTF8 または AL32UTF8 で 3 バイト必要です。さらに、CHAR、 VARCHAR および VARCHAR2 の各データ型の最大列長は、それぞれ 2000 バイト、4000 バイ トおよび 4000 バイトとなります。アプリケーションで 4000 バイトを超えるバイト数を格納 する必要がある場合は、そのデータに対して CLOB データ型を使用する必要があります。 6-18 Oracle Database グローバリゼーション・サポート・ガイド 複数言語サポートのためのデータベース・スキーマ設計 複数言語のデータの格納 Unicode キャラクタ・セットには、世界中で使用されている記述言語の文字がほとんど含ま れています。ただし、このキャラクタ・セットには、特定の文字が所属している言語に関す る情報は含まれていません。たとえば、ä という文字には、それがフランス語の文字なのか ドイツ語の文字なのかに関する情報は含まれていません。ユーザーが望む言語で情報を表示 するには、Unicode データベースに格納されているデータに、そのデータが所属している言 語の情報が含まれている必要があります。 データベース・スキーマがデータを言語に関連付ける方法は多数あります。次の各項では、 様々なアプローチについて説明します。 ■ 言語情報をデータとともに格納 ■ ファイングレイン・アクセス・コントロールを使用した変換済みデータの選択 言語情報をデータとともに格納 製品説明や製品名などのデータの場合は、CHAR または VARCHAR2 のデータ型の言語列 (language_id)を製品表に追加して、対応する製品情報の言語を識別できます。これに よって、アプリケーションは、必要な言語による情報を取り出すことができます。この言語 列に可能な値は、データベースの有効な NLS_LANGUAGE 値の 3 文字の略称です。 関連項目 : NLS_LANGUAGE 値とその略称のリストは、付録 A「ロケー ル・データ」を参照してください。 ビューを作成して、現在の言語のデータを選択することもできます。次に例を示します。 ALTER TABLE scott.product_information add (language_id VARCHAR2(50)): CREATE OR SELECT FROM WHERE REPLACE VIEW product AS product_id, product_name product_information language_id = sys_context('USERENV','LANG'); Unicode を使用した多言語データベースのサポート 6-19 複数言語サポートのためのデータベース・スキーマ設計 ファイングレイン・アクセス・コントロールを使用した変換済みデータ の選択 ファイングレイン・アクセス・コントロールを使用すると、表またはビューでユーザーが参 照できる情報の程度に制限を与えることができます。通常、そのためには WHERE 句を追加 します。WHERE 句をファイングレイン・アクセス・ポリシーとして表またはビューに追加す ると、Oracle では、表にあるすべての SQL 文にその WHERE 句が実行時に自動的に追加され ます。その結果、WHERE 句を満たす行のみがアクセス可能になります。 この機能を使用すると、アプリケーションの SELECT 文ごとに、ユーザーの必要な言語を WHERE 句で指定しなくてすみます。次の WHERE 句は、表のビューをユーザーが必要な言語 に対応している行に制限しています。 WHERE language_id = sys_context('userenv', 'LANG') この WHERE 句をファイングレイン・アクセス・ポリシーとして product_information に対して次のように指定します。 create function func1 ( sch varchar2 , obj varchar2 ) return varchar2(100); begin return 'language_id = sys_context(''userenv'', ''LANG'')'; end / DBMS_RLS.ADD_POLICY ('scott', 'product_information', 'lang_policy', 'scott', 'func1', 'select'); その結果、product_information 表にあるすべての SELECT 文は自動的に WHERE 句を追 加します。 関連項目 : ファイングレイン・アクセス・コントロールの詳細は、 『Oracle Database アプリケーション開発者ガイド - 基礎編』を参照してく ださい。 6-20 Oracle Database グローバリゼーション・サポート・ガイド 複数言語サポートのためのデータベース・スキーマ設計 LOB データ型への複数言語によるドキュメントの格納 複数言語によるドキュメントを CLOB、NCLOB または BLOB データ型に格納して Oracle Text を設定すると、そのドキュメントの内容検索を使用できます。 データベース・キャラクタ・セットが UTF8 や AL32UTF8 などのマルチバイトである場合、 CLOB 列のデータは UCS-2 互換形式で格納されます。つまり、データの変換時には、英語の ドキュメントに必要な記憶領域は 2 倍になります。アジア言語のドキュメントを CLOB 列に 格納する場合は、同じドキュメントを UTF8 を使用して LONG 列に格納する場合に比較し て、必要な記憶領域が少なくなります。ドキュメントの内容にもよりますが、通常およそ 30% 少なくなります。 NCLOB 形式のドキュメントも、データベース・キャラクタ・セットや各国語キャラクタ・ セットに関係なく、UCS-2 互換の独自形式で格納されます。記憶領域の必要量は、CLOB データの場合と同じです。ドキュメントの内容は、NCLOB 列への挿入時に、UTF-16 に変換 されます。非 Unicode データベースに多言語ドキュメントを格納する場合は、NCLOB を選 択してください。ただし、NCLOB 上での内容検索は、現段階ではサポートされていません。 BLOB 書式のドキュメントは、そのまま格納されます。挿入時および取得時にデータ変換は 発生しません。ただし、SQL 文字列操作関数(LENGTH や SUBSTR など)と照合関数 (NLS_SORT や ORDER BY など)は、BLOB データ型に適用できません。 表 6-7 に、ドキュメント格納時の CLOB、NCLOB および BLOB データ型のメリットとデメ リットを示します。 表 6-7 ドキュメント格納に関する LOB データ型の比較 データ型 メリット CLOB ■ 内容検索がサポートされています。 ■ 文字列操作がサポートされています。 NCLOB ■ ■ BLOB ■ ■ ■ ■ デメリット ■ データベース・キャラクタ・セットに依存して いません。 文字列操作がサポートされています。 データベース・キャラクタ・セットに依存して いません。 データベース・キャラクタ・セットに依存 します。 ■ 挿入時にデータ変換が必要です。 ■ バイナリ・ドキュメントは格納できません。 ■ 内容検索がサポートされていません。 ■ 挿入時にデータ変換が必要です。 ■ バイナリ・ドキュメントは格納できません。 ■ 文字列操作がサポートされていません。 内容検索がサポートされています。 データ変換がなく、データをそのまま格納でき ます。 Microsoft Word や Microsoft Excel などのバイナ リ・ドキュメントを格納できます。 Unicode を使用した多言語データベースのサポート 6-21 複数言語サポートのためのデータベース・スキーマ設計 多言語ドキュメントの内容検索に使用する索引の作成 Oracle Text では、索引を作成して、CLOB 形式および BLOB 形式で格納されている多言語ド キュメントの内容を検索できます。言語固有のレクサーを使用して、CLOB や BLOB のデー タを解析し、検索可能なキーワードのリストを生成します。 多言語ドキュメントを検索するには、マルチレクサーを作成します。マルチレクサーは、言 語列に基づいて、行ごとに言語固有のレクサーを選択します。この項では、複数言語のド キュメントに対して索引を作成するための高水準な手順を説明します。この章の内容は、次 のとおりです。 ■ マルチレクサーの作成 ■ CLOB データ型で格納されたドキュメントに対する索引の作成 ■ BLOB データ型で格納されたドキュメントに対する索引の作成 関連項目 : 『Oracle Text リファレンス』 マルチレクサーの作成 マルチレクサーを作成する最初の手順は、サポート対象言語ごとに言語固有のレクサー・プ リファレンスを作成することです。次の例では、英語、ドイツ語および日本語のレクサーを PL/SQL プロシージャで作成しています。 ctx_ddl.create_preference('english_lexer', 'basic_lexer'); ctx_ddl.set_attribute('english_lexer','index_themes','yes'); ctx_ddl.create_preference('german_lexer', 'basic_lexer'); ctx_ddl.set_attribute('german_lexer','composite','german'); ctx_ddl.set_attribute('german_lexer','alternate_spelling','german'); ctx_ddl.set_attribute('german_lexer','mixed_case','yes'); ctx_ddl.create_preference('japanese_lexer', 'JAPANESE_VGRAM_LEXER'); 作成された言語固有のレクサー・プリファレンスは、単一のマルチレクサー・プリファレン スの下に集める必要があります。最初に、MULTI_LEXER オブジェクトを使用して、次のよ うにマルチレクサー・プリファレンスを作成します。 ctx_ddl.create_preference('global_lexer','multi_lexer'); ここで、add_sub_lexer コールを使用して、言語固有のレクサーをマルチレクサー・プリ ファレンスに追加します。 ctx_ddl.add_sub_lexer('global_lexer', 'german', 'german_lexer'); ctx_ddl.add_sub_lexer('global_lexer', 'japanese', 'japanese_lexer'); ctx_ddl.add_sub_lexer('global_lexer', 'default','english_lexer'); これによって、german_lexer プリファレンスはドイツ語ドキュメントを処理し、 japanese_lexer プリファレンスは日本語ドキュメントを処理し、english_lexer プリ ファレンスは、言語に DEFAULT を使用して、それ以外のすべてのドキュメントを処理する ように指名されます。 6-22 Oracle Database グローバリゼーション・サポート・ガイド 複数言語サポートのためのデータベース・スキーマ設計 CLOB データ型で格納されたドキュメントに対する索引の作成 マルチレクサーによって、表の言語列に基づいて、行ごとに使用するレクサーが決定されま す。これは、テキスト列内のドキュメントの言語が格納されているキャラクタ列です。 Oracle の言語名を使用して、この列にあるドキュメントの言語を識別します。たとえば、 CLOB データ型を使用してドキュメントを格納する場合は、言語列をそのドキュメントが格 納されている表に追加します。 CREATE TABLE globaldoc (doc_id NUMBER PRIMARY KEY, language VARCHAR2(30), text CLOB); この表に索引を作成するには、次のようにマルチレクサー・プリファレンスを使用して言語 列名を指定します。 CREATE INDEX globalx ON globaldoc(text) indextype IS ctxsys.context parameters ('lexer global_lexer language column language'); BLOB データ型で格納されたドキュメントに対する索引の作成 言語列の他に、キャラクタ・セットと書式列を、ドキュメントが格納されている表に追加す る必要があります。キャラクタ・セット列には、Oracle キャラクタ・セット名を使用してド キュメントのキャラクタ・セットを格納します。書式列には、ドキュメントがテキスト・ド キュメントであるかバイナリ・ドキュメントであるかを指定します。たとえば、CREATE TABLE 文では、次のように列 characterset および format を指定できます。 CREATE TABLE globaldoc ( doc_id NUMBER PRIMARY KEY, language VARCHAR2(30), characterset VARCHAR2(30), format VARCHAR2(10), text BLOB ); ワードプロセッシングまたはスプレッドシートのドキュメントを表に入力し、format 列に binary を指定できます。HTML、XML およびテキスト・フォーマットのドキュメントの場 合は、表にドキュメントを入力して、format 列に text を指定します。 キャラクタ・セットを指定する列があるため、様々なキャラクタ・セットによるテキスト・ ドキュメントを格納できます。 Unicode を使用した多言語データベースのサポート 6-23 複数言語サポートのためのデータベース・スキーマ設計 索引の作成時に、書式列とキャラクタ・セット列の名前を指定します。 CREATE INDEX globalx ON globaldoc(text) indextype is ctxsys.context parameters ('filter inso_filter lexer global_lexer language column language format column format charset column characterset'); 全ドキュメントがテキスト・フォーマットの場合は、charset_filter を使用できます。 charset_filter によって、データは charset 列で指定されたキャラクタ・セットから データベース・キャラクタ・セットに変換されます。 6-24 Oracle Database グローバリゼーション・サポート・ガイド 7 Unicode を使用したプログラミング この章では、Oracle のデータベース・アクセス製品と Unicode を併用する方法について説 明します。この章の内容は、次のとおりです。 ■ Unicode を使用したプログラミングの概要 ■ Unicode を使用した SQL と PL/SQL のプログラミング ■ Unicode を使用した OCI プログラミング ■ Unicode を使用した Pro*C/C++ プログラミング ■ Unicode を使用した JDBC プログラミング ■ Unicode を使用した ODBC と OLE DB のプログラミング ■ Unicode を使用した XML プログラミング Unicode を使用したプログラミング 7-1 Unicode を使用したプログラミングの概要 Unicode を使用したプログラミングの概要 Oracle には、Unicode データの挿入と取出しを行うためのデータベース・アクセス製品がい くつか用意されています。Oracle では、Java や C/C++ などの一般的に使用されているプロ グラミング環境に対応したデータベース・アクセス製品を提供しています。データはデータ ベースとクライアント・プログラム間で透過的に変換されるため、クライアント・プログラ ムがデータベース・キャラクタ・セットと各国語キャラクタ・セットの影響を受けないこと が保証されます。さらに、クライアント・プログラムは、データベースで使用される NCHAR や CHAR などの文字データ型の影響も受けない場合があります。 データ変換操作によってデータベース・サーバーに負荷をかけないように、Oracle は常に、 これらの操作をクライアント側のデータベース・アクセス製品に移動しようとします。デー タベースでデータ変換が必要な場合があり、この操作はパフォーマンスに影響します。この 章では、データ変換の流れの詳細を説明します。 データベース・アクセス製品のスタックおよび Unicode オラクル社では、データベース・アクセス製品の包括的なセットを提供しています。これら の製品によって、異なる開発環境のプログラムは、データベースに格納された Unicode デー タにアクセスできます。表 7-1 にこれらの製品を示します。 表 7-1 Oracle のデータベース・アクセス製品 プログラミング環境 Oracle のデータベース・アクセス製品 C/C++ Oracle Call Interface(OCI) Oracle Pro*C/C++ Oracle ODBC ドライバ Oracle Provider for OLE DB Oracle Data Provider for .NET Java Oracle JDBC OCI または Thin ドライバ Oracle サーバー側 Thin ドライバ Oracle サーバー側内部ドライバ PL/SQL Oracle PL/SQL および SQL Visual Basic/C# Oracle ODBC ドライバ Oracle Provider for OLE DB 7-2 Oracle Database グローバリゼーション・サポート・ガイド Unicode を使用したプログラミングの概要 図 7-1 は、データベース・アクセス製品によるデータベースへのアクセス方法を示していま す。 図 7-1 Oracle のデータベース・アクセス製品 OCI は、残りのクライアント側データベース・アクセス製品が使用する最下位レベルの API です。SQL CHAR データ型および NCHAR データ型で格納されている Unicode に、C/C++ プ ログラムでアクセスするための柔軟な方法を提供します。OCI を使用すると、データの挿入 または取出しに使用するキャラクタ・セット(UTF-8 や UTF-16 など)をプログラムで指定 できます。データベースには、Oracle Net を介してアクセスします。 Oracle Pro*C/C++ を使用すると、プログラム内に SQL および PL/SQL を埋め込むことがで きます。OCI の Unicode 機能を使用して、SQL CHAR データ型と NCHAR データ型に対する UTF-16 と UTF-8 のデータ・アクセスを提供します。 Oracle ODBC ドライバを使用すると、Windows プラットフォームで実行されている C/C++、Visual Basic および VBScript のプログラムで、データベースに SQL CHAR データ型 および NCHAR データ型で格納されている Unicode データにアクセスできます。ODBC 標準 仕様に指定されている SQLWCHAR インタフェースを実装することによって、UTF-16 デー タ・アクセスを提供します。 Oracle Provider for OLE DB を使用すると、Windows プラットフォームで実行されている C/C++、Visual Basic および VBScript のプログラムで、SQL CHAR データ型および NCHAR データ型で格納されている Unicode データにアクセスできます。ワイド文字列の OLE DB データ型を通して、UTF-16 データ・アクセスを提供します。 Unicode を使用したプログラミング 7-3 Unicode を使用したプログラミングの概要 Oracle Data Provider for .NET を使用すると、Windows プラットフォーム上の任意の .NET プログラミング環境で実行されているプログラムで、SQL CHAR データ型および NCHAR デー タ型で格納されている Unicode データにアクセスできます。Unicode のデータ型を通して、 UTF-16 データ・アクセスを提供します。 Oracle JDBC ドライバは、Oracle データベースにアクセスするための主要な Java プログラ ム・インタフェースです。Oracle には次の JDBC ドライバが用意されています。 ■ ■ ■ ■ Java アプリケーションで使用され、OCI ライブラリを必要とする JDBC OCI ドライバ 純粋な Java ドライバで、Java アプレットで主に使用され、TCP/IP を介した Oracle Net プロトコルをサポートする JDBC Thin ドライバ 純粋な Java ドライバで、Java ストアド・プロシージャ内で他の Oracle サーバーへの接 続に使用されるサーバー側 JDBC Thin ドライバ Oracle サーバー内部でデータベース内のデータへのアクセスに使用されるサーバー側 JDBC 内部ドライバ ドライバはすべて、データベースに格納されている SQL CHAR データ型および NCHAR デー タ型への Unicode データ・アクセスをサポートします。 PL/SQL と SQL のエンジンは、OCI などのクライアント側プログラムやサーバー側の PL/SQL ストアド・プロシージャのかわりに、PL/SQL プログラムと SQL 文を処理します。 これらのエンジンを使用すると、PL/SQL プログラムで CHAR、VARCHAR2、NCHAR および NVARCHAR2 の各変数を宣言し、データベースの SQL CHAR および NCHAR データ型にアクセ スできます。 次の項では、各データベース・アクセス製品が、Oracle データベースへの Unicode データ・ アクセスをどのようにサポートしているかを説明し、これらの製品の使用例を示します。 ■ Unicode を使用した SQL と PL/SQL のプログラミング ■ Unicode を使用した OCI プログラミング ■ Unicode を使用した Pro*C/C++ プログラミング ■ Unicode を使用した JDBC プログラミング ■ Unicode を使用した ODBC と OLE DB のプログラミング 7-4 Oracle Database グローバリゼーション・サポート・ガイド Unicode を使用した SQL と PL/SQL のプログラミング Unicode を使用した SQL と PL/SQL のプログラミング SQL は、すべてのプログラムとユーザーが、Oracle データベースのデータに直接的または間 接的にアクセスするときに使用する基本言語です。PL/SQL は、SQL のデータ操作能力と手 続き型言語のデータ処理能力を結合した手続き型言語です。SQL と PL/SQL は両方とも、 他のプログラム言語に埋め込むことができます。この項では、多言語アプリケーションに配 布可能な SQL と PL/SQL の Unicode 関連機能について説明します。 この項の内容は、次のとおりです。 ■ SQL NCHAR データ型 ■ NCHAR データ型と他のデータ型の間の暗黙的な変換 ■ データ型変換中のデータ消失に対する例外処理 ■ 暗黙的なデータ型変換の規則 ■ Unicode データ型の SQL 関数 ■ その他の SQL 関数 ■ Unicode 文字列リテラル ■ NCHAR データを使用した UTL_FILE パッケージの使用 関連項目 : ■ 『Oracle Database SQL リファレンス』 ■ 『PL/SQL ユーザーズ・ガイドおよびリファレンス』 SQL NCHAR データ型 SQL NCHAR データ型は次の 3 つです。 ■ NCHAR データ型 ■ NVARCHAR2 データ型 ■ NCLOB データ型 NCHAR データ型 表の列または PL/SQL 変数を NCHAR データ型として定義する場合、長さは常に文字数とし て指定します。たとえば次の文では、最大文字長が 30 の列が 1 つ作成されます。 CREATE TABLE table1 (column1 NCHAR(30)); Unicode を使用したプログラミング 7-5 Unicode を使用した SQL と PL/SQL のプログラミング この列の最大バイト数は、次のように決定されます。 maximum number of bytes = (maximum number of characters) x (maximum number of bytes for each character) たとえば、各国語キャラクタ・セットが UTF8 の場合、最大バイト長は 30 文字に 1 文字当 たり 3 バイトを乗算した値、つまり 90 バイトとなります。 すべての NCHAR データ型に使用する各国語キャラクタ・セットは、データベースの作成時 に定義します。各国語キャラクタ・セットは UTF8 または AL16UTF16 のいずれかです。デ フォルトは AL16UTF16 です。 使用可能な最大列サイズは、各国語キャラクタ・セットが UTF8 の場合は 2000 文字、 AL16UTF16 の場合は 1000 文字です。実際のデータが最大バイト制限の 2000 の対象となり ます。2 つのサイズ制限は同時に満たす必要があります。PL/SQL では、NCHAR データの最 大長は 32767 バイトです。NCHAR 変数は 32767 文字まで定義できますが、実際のデータは 32767 バイトを超えることはできません。列の長さより短い値を挿入すると、最大文字長と 最大バイト長のいずれか小さいほうの値まで空白で埋められます。 注意 : UTF8 は可変幅キャラクタ・セットであるため、パフォーマンスに 影響する場合があります。NCHAR フィールドの空白埋めが過剰に行われる と、パフォーマンスが低下します。NVARCHAR データ型を使用するか、 NCHAR データ型のキャラクタ・セットを AL16UTF16 に変更することを考 慮してください。 NVARCHAR2 データ型 NVARCHAR2 データ型は、各国語キャラクタ・セットを使用する可変長文字列を指定します。 NVARCHAR2 列を使用して表を作成するときは、列の最大文字数を指定します。NVARCHAR2 の長さは、NCHAR の場合と同様に常に文字単位です。続いて、値が列の最大長を超えないか ぎり、ユーザーが指定したとおりに各値が列内に格納されます。文字列の値が最大長まで埋 め込まれることはありません。 使用可能な最大列サイズは、各国語キャラクタ・セットが UTF8 の場合は 4000 文字、 AL16UTF16 の場合は 2000 文字です。バイト単位では、NVARCHAR2 列の最大長は 4000 バイ トです。バイト数の上限と文字数の上限の両方を満たす必要があるため、実際に NVARCHAR2 列に使用できる最大文字数は、4000 バイトに書込み可能な文字数となります。 PL/SQL では、NVARCHAR2 変数の最大長は 32767 バイトです。NVARCHAR2 変数は 32767 文 字まで定義できますが、実際のデータは 32767 バイトを超えることはできません。 次の文では、最大文字長が 2000 で最大バイト長が 4000 の NVARCHAR2 列を 1 つ含む表が作 成されます。 CREATE TABLE table2 (column2 NVARCHAR2(2000)); 7-6 Oracle Database グローバリゼーション・サポート・ガイド Unicode を使用した SQL と PL/SQL のプログラミング NCLOB データ型 NCLOB は、最大 4GB の Unicode 文字を格納する、キャラクタ・ラージ・オブジェクトで す。BLOB データ型とは異なり、NCLOB データ型では完全なトランザクション・サポートが あるため、SQL、DBMS_LOB パッケージまたは OCI を使用して行われた変更は、完全にトラ ンザクションに組み込まれます。NCLOB 値の操作は、コミットおよびロールバックできま す。ただし、あるトランザクションで PL/SQL または OCI 変数に保存した NCLOB ロケータ を別のトランザクションまたはセッションで使用することはできません。 NCLOB 値は、各国語キャラクタ・セットに関係なく、UCS-2 互換形式でデータベースに格 納されます。格納された Unicode 値は、クライアントまたはサーバーで要求された固定幅ま たは可変幅のキャラクタ・セットに変換されます。可変幅のキャラクタ・セットを使用して NCLOB 列に挿入したデータは、データベースに格納される前に UCS-2 互換形式に変換され ます。 関連項目 : NCLOB データ型の詳細は、『Oracle Database アプリケーショ ン開発者ガイド - ラージ・オブジェクト』を参照してください。 NCHAR データ型と他のデータ型の間の暗黙的な変換 Oracle では、SQL NCHAR データ型と、他の Oracle データ型(CHAR、VARCHAR2、NUMBER、 DATE、ROWID および CLOB など)との間の暗黙的な変換がサポートされています。SQL NCHAR データ型については、CHAR および VARCHAR2 データ型に関する暗黙的な変換もサ ポートされています。SQL NCHAR データ型は、SQL CHAR データ型と同様に使用できます。 SQL CHAR データ型と SQL NCHAR データ型の間の型変換では、データベース・キャラクタ・ セットと各国語キャラクタ・セットが異なるときに、キャラクタ・セットの変換が行われる 場合があります。ターゲット・データが CHAR または NCHAR の場合は、空白埋めが発生す ることがあります。 関連項目 : 『Oracle Database SQL リファレンス』 データ型変換中のデータ消失に対する例外処理 キャラクタ・セット変換が必要なときは、データ型変換時にデータを消失する可能性があり ます。ソース・キャラクタ・セット内の文字がターゲットのキャラクタ・セット内で定義さ れていない場合、その場所には置換文字が使用されます。たとえば、NCHAR データを通常の CHAR 列に挿入しようとしたときに、NCHAR(Unicode)フォーム内の文字データがデータ ベース・キャラクタ・セットに変換できない場合、その文字はデータベース・キャラクタ・ セットで定義されている置換文字に置き換えられます。文字列型変換時のデータ消失に関す る対処方法は、NLS_NCHAR_CONV_EXCP 初期化パラメータによって制御されます。このパ ラメータが TRUE に設定されているときは、データ消失が発生する SQL 文は ORA-12713 エ ラーを戻し、対応する操作は停止します。このパラメータが FALSE に設定されているとき は、データ消失はレポートされず、変換不可能な文字は置換文字で置き換えられます。デ フォルト値は TRUE です。このパラメータは、暗黙的な変換と明示的な変換の両方に対して 機能します。 Unicode を使用したプログラミング 7-7 Unicode を使用した SQL と PL/SQL のプログラミング PL/SQL の場合は、SQL CHAR データ型と NCHAR データ型の変換時にデータ消失が発生する と、暗黙的な変換の場合も明示的な変換の場合も LOSSY_CHARSET_CONVERSION 例外が発 生します。 暗黙的なデータ型変換の規則 状況によって、一方向のデータ型変換のみが可能な場合と、両方向のデータ型変換が可能な 場合があります。Oracle では、データ型間の変換に関して一連の規則が定義されています。 表 7-2 に、データ型間の変換に関する規則を示します。 表 7-2 データ型間の変換に関する規則 文 規則 INSERT/UPDATE 文 値は、ターゲット・データベース列のデータ型に変換されます。 SELECT INTO 文 データベースのデータは、ターゲット変数のデータ型に変換されます。 変数の代入 等号の右辺の値は、等号の左辺のターゲット変数のデータ型に変換されます。 SQL 関数と PL/SQL 関数の パラメータ CHAR、VARCHAR2、NCHAR および NVARCHAR2 は同じ方法でロードされます。CHAR、 VARCHAR2、NCHAR または NVARCHAR2 データ型の引数は、CHAR、VARCHAR2、 NCHAR または NVARCHAR2 データ型のいずれかの仮パラメータと比較されます。引数 と仮パラメータのデータ型が正確に一致していない場合は、データが関数の入口でパ ラメータにコピーされるとき、および関数の出口で引数にコピーアウトされるとき に、暗黙的な変換が行われます。 連結(||)操作または CONCAT 関数 あるオペランドが SQL CHAR データ型または NCHAR データ型で、他のオペランドが NUMBER またはその他の非文字データ型の場合、他のデータ型は VARCHAR2 または NVARCHAR2 に変換されます。文字データ型間の連結については、7-9 ページの「SQL NCHAR データ型と SQL CHAR データ型」を参照してください。 SQL CHAR または NCHAR 文字の値は NUMBER データ型に変換されます。 データ型と NUMBER データ型 SQL CHAR または NCHAR データ型と DATE データ型 文字の値は DATE データ型に変換されます。 SQL CHAR または NCHAR データ型と ROWID データ型 文字データ型は ROWID データ型に変換されます。 SQL NCHAR データ型と SQL CHAR データ型 文字の値は NUMBER データ型に変換されます。 SQL CHAR または NCHAR 文字の値は NUMBER データ型に変換されます。 データ型と NUMBER データ型 7-8 Oracle Database グローバリゼーション・サポート・ガイド Unicode を使用した SQL と PL/SQL のプログラミング 表 7-2 データ型間の変換に関する規則(続き) 文 規則 SQL CHAR または NCHAR データ型と DATE データ型 文字の値は DATE データ型に変換されます。 SQL CHAR または NCHAR データ型と ROWID データ型 文字の値は ROWID データ型に変換されます。 SQL NCHAR データ型と SQL CHAR データ型 SQL NCHAR データ型と SQL CHAR データ型との比較はさらに複雑です。これは、 これらのデータ型が異なるキャラクタ・セットでエンコードされている場合があるた めです。 CHAR 値と VARCHAR2 値が比較される場合は、CHAR 値が VARCHAR2 値に変換されま す。 NCHAR 値と NVARCHAR2 値が比較される場合は、NCHAR 値が NVARCHAR2 値に変換さ れます。 SQL NCHAR データ型と SQL CHAR データ型との間で比較が行われるとき、これらの データ型が異なるキャラクタ・セットでエンコードされている場合は、キャラクタ・ セット変換が行われます。SQL NCHAR データ型のキャラクタ・セットは常に Unicode で、UTF8 エンコーディングまたは AL16UTF16 エンコーディングのいずれかです。 これらの文字レパートリは同じですが、Unicode 規格では異なるエンコーディングで す。SQL CHAR データ型は、データベース・キャラクタ・セットを使用します。この データベース・キャラクタ・セットは、Oracle がサポートするいずれかのキャラク タ・セットです。Unicode は Oracle でサポートされているキャラクタ・セットのスー パーセットであるため、SQL CHAR データ型から SQL NCHAR データ型への変換は、 いつでもデータ消失なしに行うことができます。 Unicode データ型の SQL 関数 SQL NCHAR データ型は、明示的な変換関数を使用して、SQL CHAR データ型や他のデータ型 と相互に変換できます。この項の例では、次の文で作成された表を使用します。 CREATE TABLE customers (id NUMBER, name NVARCHAR2(50), address NVARCHAR2(200), birthdate DATE); 例 7-1 TO_NCHAR 関数を使用した customers 表の移入 TO_NCHAR 関数は実行時にデータを変換しますが、N 関数はコンパイル時にデータを変換し ます。 INSERT INTO customers VALUES (1000, TO_NCHAR('John Smith'),N'500 Oracle Parkway',sysdate); Unicode を使用したプログラミング 7-9 Unicode を使用した SQL と PL/SQL のプログラミング 例 7-2 TO_CHAR 関数を使用した customers 表からの選択 次の文では、name の値が各国語キャラクタ・セットの文字からデータベース・キャラク タ・セットの文字に変換され、その後で LIKE 句に従って選択されます。 SELECT name FROM customers WHERE TO_CHAR(name) LIKE '%Sm%'; 次の出力が表示されます。 NAME -------------------------------------John Smith 例 7-3 TO_DATE 関数を使用した customers 表からの選択 N 関数を使用すると、NCHAR または CHAR データ型のデータを TO_DATE 関数のパラメータ として渡すことができます。データ型変換は実行時に行われるため、データ型を混在させる ことができます。 DECLARE ndatestring NVARCHAR2(20) := N'12-SEP-1975'; BEGIN SELECT name into ndstr FROM customers WHERE (birthdate)> TO_DATE(ndatestring, 'DD-MON-YYYY', N'NLS_DATE_LANGUAGE = AMERICAN'); END; 例 7-3 に示したように、SQL NCHAR データ型のデータを明示的な変換関数に渡すことができ ます。複数の文字列パラメータを使用すると、SQL CHAR および NCHAR データ型のデータを 混在させることができます。 関連項目 : SQL NCHAR データ型の明示的な変換関数の詳細は、 『Oracle Database SQL リファレンス』を参照してください。 7-10 Oracle Database グローバリゼーション・サポート・ガイド Unicode を使用した SQL と PL/SQL のプログラミング その他の SQL 関数 大部分の SQL 関数は、SQL NCHAR データ型および混合した文字データ型の引数を取ること ができます。戻されるデータ型は、最初の引数の型に基づきます。これらの関数に渡された NUMBER や DATE などの非文字列データ型は、VARCHAR2 に変換されます。次の例では、7-9 ページの「Unicode データ型の SQL 関数」で作成した customer 表を使用します。 例 7-4 INSTR 関数 SELECT INSTR(name, N'Sm', 1, 1) FROM customers; 例 7-5 CONCAT 関数 SELECT CONCAT(name,id) FROM customers; id は NVARCHAR2 に変換された後、name と連結されます。 例 7-6 RPAD 関数 SELECT RPAD(name,100,' ') FROM customers; 出力は次のようになります。 RPAD(NAME,100,'') -----------------------------------------John Smith スペース文字 ' ' が NCHAR キャラクタ・セットの対応する文字に変換された後、表示の全長 が 100 になるように name の右側に埋め込まれます。 関連項目 : 『Oracle Database SQL リファレンス』 Unicode を使用したプログラミング 7-11 Unicode を使用した SQL と PL/SQL のプログラミング Unicode 文字列リテラル Unicode 文字列リテラルは、次の方法で SQL および PL/SQL に入力できます。 ■ ■ 引用符で囲まれた文字列リテラルの前に接頭辞 N を付加します。この接頭辞によって、 その後に続く文字列リテラルが NCHAR 文字列リテラルであることが明示的に示されま す。たとえば、N'12-SEP-1975' は NCHAR 文字列リテラルです。 文字列リテラルを引用符で囲みます。Oracle では SQL NCHAR データ型への暗黙的な変 換がサポートされているため、文字列リテラルは必要に応じて SQL NCHAR データ型に 変換されます。 注意 : 文字列リテラルが問合せに含まれていて、その問合せが SQL*Plus などのクライアント側のツールを通して発行されると、すべての問合せ は、クライアントのキャラクタ・セットでエンコードされた後、処理前に サーバーのデータベース・キャラクタ・セットに変換されます。そのた め、文字列リテラルがサーバーのデータベース・キャラクタ・セットに変 換できない場合は、データが消失する可能性があります。 ■ NCHR(n) SQL 関数を使用します。この関数は、各国語キャラクタ・セット (AL16UTF16 または UTF8)内の文字コードの数を戻します。複数の NCHR(n) 関数を 連結した結果は、NVARCHAR2 データになります。このように、クライアントとサー バーのキャラクタ・セット変換を行わずに、NVARCHAR2 文字列を直接作成できます。 たとえば、NCHR(32) は空白文字を表します。 NCHR(n) は各国語キャラクタ・セットに関連付けられているため、結果値の移植性は その各国語キャラクタ・セットで実行されるアプリケーションに限定されます。この移 植性が重要な場合は、UNISTR 関数を使用して移植性の制限を解除します。 ■ UNISTR('string') SQL 関数を使用します。UNISTR('string') は、文字列を各国語 キャラクタ・セットに変換します。移植性を確保してデータを保持するには、ASCII 文 字と Unicode エンコーディングのみを ¥xxxx 形式で含めます。xxxx は、UTF-16 エン コーディング形式で文字コード値を表す 16 進値です。たとえば、 UNISTR('G¥0061ry') は 'Gary' を表します。ASCII 文字は、データベース・キャラ クタ・セットに変換されてから、各国語キャラクタ・セットに変換されます。Unicode エンコーディングは、各国語キャラクタ・セットに直接変換されます。 最後の 2 つの方法を使用すると、すべての Unicode 文字列リテラルをエンコードできます。 7-12 Oracle Database グローバリゼーション・サポート・ガイド Unicode を使用した SQL と PL/SQL のプログラミング NCHAR データを使用した UTL_FILE パッケージの使用 UTL_FILE パッケージは、Unicode 各国語キャラクタ・セットのデータを処理するために、 Oracle9i で拡張されています。次の関数とプロシージャが追加されています。 ■ FOPEN_NCHAR この関数は、最大行サイズを指定して、入力用または出力用のファイルを Unicode で オープンします。この関数を使用すると、データベース・キャラクタ・セットではなく Unicode でテキスト・ファイルの読取り / 書込みを行うことができます。 ■ GET_LINE_NCHAR このプロシージャは、ファイル・ハンドルで識別されたオープン・ファイルからテキス トを読み込み、そのテキストを出力バッファ・パラメータに入れます。このプロシー ジャを使用すると、データベース・キャラクタ・セットではなく Unicode でテキスト・ ファイルを読み込むことができます。 ■ PUT_NCHAR このプロシージャは、バッファ・パラメータに格納されているテキスト文字列を、ファ イル・ハンドルで識別されたオープン・ファイルに書き込みます。このプロシージャを 使用すると、データベース・キャラクタ・セットではなく Unicode でテキスト・ファイ ルを書き込むことができます。 ■ PUT_LINE_NCHAR このプロシージャは、バッファ・パラメータに格納されているテキスト文字列を、ファ イル・ハンドルで識別されたオープン・ファイルに書き込みます。このプロシージャを 使用すると、データベース・キャラクタ・セットではなく Unicode でテキスト・ファイ ルを書き込むことができます。 ■ PUTF_NCHAR このプロシージャは、PUT_NCHAR プロシージャに書式指定が追加されたものです。こ のプロシージャを使用すると、データベース・キャラクタ・セットではなく Unicode で テキスト・ファイルを書き込むことができます。 関連項目 : UTL_FILE パッケージの詳細は、 『PL/SQL パッケージ・プロ シージャおよびタイプ・リファレンス』を参照してください。 Unicode を使用したプログラミング 7-13 Unicode を使用した OCI プログラミング Unicode を使用した OCI プログラミング OCI はデータベースにアクセスするための最下位レベルの API であるため、可能な最大のパ フォーマンスを提供します。OCI で Unicode を使用するときは、次の内容を考慮してくださ い。 ■ Unicode プログラミング用の OCIEnvNlsCreate() 関数 ■ OCI Unicode のコード変換 ■ OCI での NLS_LANG キャラクタ・セットが UTF8 または AL32UTF8 の場合 ■ OCI での SQL CHAR データ型のバインドと定義 ■ OCI での SQL NCHAR データ型のバインドと定義 ■ OCI での CLOB Unicode データおよび NCLOB Unicode データのバインドと定義 関連項目 : 第 10 章「グローバル環境での OCI プログラミング」 Unicode プログラミング用の OCIEnvNlsCreate() 関数 OCIEnvNlsCreate() 関数を使用して、OCI 環境の作成時に SQL CHAR のキャラクタ・ セットと SQL NCHAR のキャラクタ・セットを指定します。これは OCIEnvCreate() 関数 の拡張バージョンであり、2 つのキャラクタ・セット ID を指定できるように拡張された引 数を取ります。OCI_UTF16ID UTF-16 キャラクタ・セット ID によって、Oracle9i リリース 1(9.0.1)で導入された Unicode モードが置き換えられています。次に例を示します。 OCIEnv *envhp; status = OCIEnvNlsCreate((OCIEnv **)&envhp, (ub4)0, (void *)0, (void *(*) ()) 0, (void *(*) ()) 0, (void(*) ()) 0, (size_t) 0, (void **)0, (ub2)OCI_UTF16ID, /* Metadata and SQL CHAR character set */ (ub2)OCI_UTF16ID /* SQL NCHAR character set */); Unicode モードでは、OCIEnvCreate() 関数とともに OCI_UTF16 フラグが使用されます が、このモードは使用されなくなりました。 SQL CHAR のキャラクタ・セットと SQL NCHAR のキャラクタ・セットの両方に OCI_UTF16ID を指定すると、すべてのメタデータのバインドされた定義済みデータは、 UTF-16 でエンコードされます。メタデータには、SQL 文、ユーザー名、エラー・メッセー ジおよび列名が含まれます。そのため、継承される操作はいずれも NLS_LANG の設定に依存 せず、すべてのメタテキスト・データ・パラメータ(text*)は、UTF-16 エンコーディン グでは Unicode テキスト・データ型(utext*)とみなされます。 7-14 Oracle Database グローバリゼーション・サポート・ガイド Unicode を使用した OCI プログラミング OCI_UTF16ID キャラクタ・セット ID を使用して OCIEnv() 関数を初期化するときに SQL 文を準備するには、(utext*) 文字列を指定して OCIStmtPrepare() 関数をコールしま す。次の例は、Windows プラットフォームでのみ動作します。他のプラットフォームの場 合は、wchar_t データ型を変更する必要があります。 const wchar_t sqlstr[] = L"SELECT * FROM ENAME=:ename"; ... OCIStmt* stmthp; sts = OCIHandleAlloc(envh, (void **)&stmthp, OCI_HTYPE_STMT, 0, NULL); status = OCIStmtPrepare(stmthp, errhp,(const text*)sqlstr, wcslen(sqlstr), OCI_NTV_SYNTAX, OCI_DEFAULT); OCIEnv() 関数はすでに UTF-16 のキャラクタ・セット ID を使用して初期化されているた め、データをバインドして定義するために OCI_ATTR_CHARSET_ID 属性を設定する必要は ありません。バインド変数名も UTF-16 文字列であることが必要です。 /* Inserting Unicode data */ OCIBindByName(stmthp1, &bnd1p, errhp, (const text*)L":ename", (sb4)wcslen(L":ename"), (void *) ename, sizeof(ename), SQLT_STR, (void *)&insname_ind, (ub2 *) 0, (ub2 *) 0, (ub4) 0, (ub4 *)0, OCI_DEFAULT); OCIAttrSet((void *) bnd1p, (ub4) OCI_HTYPE_BIND, (void *) &ename_col_len, (ub4) 0, (ub4)OCI_ATTR_MAXDATA_SIZE, errhp); ... /* Retrieving Unicode data */ OCIDefineByPos (stmthp2, &dfn1p, errhp, (ub4)1, (void *)ename, (sb4)sizeof(ename), SQLT_STR, (void *)0, (ub2 *)0, (ub2*)0, (ub4)OCI_DEFAULT); この操作は OCIExecute() 関数で実行されます。 関連項目 : 10-2 ページ「OCI でのキャラクタ・セットの指定」 Unicode を使用したプログラミング 7-15 Unicode を使用した OCI プログラミング OCI Unicode のコード変換 クライアントとサーバーのキャラクタ・セットが異なる場合は、OCI クライアントとデータ ベース・サーバーの間で Unicode キャラクタ・セット変換が行われます。この変換は、環境 によってクライアントまたはサーバーのいずれの側でも行われますが、通常はクライアント 側で行われます。 データ整合性 OCI API を適切にコールしないと、変換時にデータが消失する可能性があります。サーバー とクライアントのキャラクタ・セットが異なる場合は、変換先キャラクタ・セットが変換元 キャラクタ・セットより小さいセットであると、データが消失する可能性があります。両方 のキャラクタ・セットが Unicode キャラクタ・セット(UTF8 や AL16UTF16 など)の場合、 この潜在的な問題は回避できます。 SQL NCHAR データ型をバインドまたは定義するときは、OCI_ATTR_CHARSET_FORM 属性を SQLCS_NCHAR に設定する必要があります。この設定を行わないと、データはデータベー ス・キャラクタ・セットに変換されてから、各国語キャラクタ・セットとの間で変換される ため、データが消失する可能性があります。データが消失するのは、データベース・キャラ クタ・セットが Unicode でない場合のみです。 Unicode 使用時の OCI パフォーマンスに与える影響 冗長なデータ変換は、OCI アプリケーションのパフォーマンス低下の原因となる場合があり ます。このような冗長な変換は、次の 2 つの場合に発生します。 ■ ■ SQL CHAR データ型をバインドまたは定義して、OCI_ATTR_CHARSET_FORM 属性を SQLCS_NCHAR に設定すると、クライアントのキャラクタ・セットから各国語キャラク タ・セットへのデータ変換と、各国語キャラクタ・セットからデータベース・キャラク タ・セットへのデータ変換が行われます。データ消失はないと思われますが、必要な変 換が 1 回の場合でも変換が 2 回行われます。 SQL NCHAR データ型をバインドまたは定義して、OCI_ATTR_CHARSET_FORM を設定し ないと、クライアントのキャラクタ・セットからデータベース・キャラクタ・セットへ の変換と、データベース・キャラクタ・セットから各国語データベース・キャラクタ・ セットへのデータ変換が行われます。最悪の場合、データベース・キャラクタ・セット がクライアントのキャラクタ・セットより小さいと、データが消失する可能性がありま す。 パフォーマンス上の問題を回避するために、ターゲット列のデータ型に基づいて OCI_ATTR_CHARSET_FORM を常に適切に設定する必要があります。ターゲットのデータ型 が不明の場合に、バインドおよび定義を行うときは OCI_ATTR_CHARSET_FORM 属性を SQLCS_NCHAR に設定してください。 表 7-3 に、OCI のキャラクタ・セット変換を示します。 7-16 Oracle Database グローバリゼーション・サポート・ガイド Unicode を使用した OCI プログラミング 表 7-3 OCI のキャラクタ・セットの変換 OCI クライアント・ OCI_ATTR_ CHARSET_ バッファの データ型 FORM データベース内の ターゲット列の データ型 utext SQLCS_ IMPLICIT utext utext utext 変換元と変換先 コメント CHAR、 VARCHAR2、 CLOB OCI での、UTF-16 とデータ ベース・キャラクタ・セット 予期しないデータ消失は ありません。 SQLCS_ NCHAR NCHAR、 NVARCHAR2、 NCLOB OCI での、UTF-16 と各国語 キャラクタ・セット 予期しないデータ消失は ありません。 SQLCS_ NCHAR CHAR、 VARCHAR2、 CLOB OCI での、UTF-16 と各国語 キャラクタ・セット 予期しないデータ消失はあ りませんが、各国語キャラ クタ・セットを経由して変 換が行われるため、 パフォーマンスが低下する 可能性があります。 NCHAR、 NVARCHAR2、 NCLOB OCI での、UTF-16 とデータ ベース・キャラクタ・セット SQLCS_ IMPLICIT データベース・サーバーで の、各国語キャラクタ・セッ トとデータベース・キャラク タ・セット データベース・サーバーで の、データベース・キャラク タ・セットと各国語キャラク タ・セット データベース・キャラク タ・セットが Unicode でな い場合は、データが消失す る可能性があります。 text SQLCS_ IMPLICIT CHAR、 VARCHAR2、 CLOB OCI での、NLS_LANG キャラ クタ・セットとデータベー ス・キャラクタ・セット 予期しないデータ消失は ありません。 text SQLCS_ NCHAR NCHAR、 NVARCHAR2、 NCLOB OCI での、NLS_LANG キャラ クタ・セットと各国語キャラ クタ・セット 予期しないデータ消失は ありません。 text SQLCS_ NCHAR CHAR、 VARCHAR2、 CLOB OCI での、NLS_LANG キャラ クタ・セットと各国語キャラ クタ・セット 予期しないデータ消失はあ りませんが、各国語キャラ クタ・セットを経由して変 換が行われるため、 パフォーマンスが低下する 可能性があります。 データベース・サーバーで の、各国語キャラクタ・セッ トとデータベース・キャラク タ・セット Unicode を使用したプログラミング 7-17 Unicode を使用した OCI プログラミング 表 7-3 OCI のキャラクタ・セットの変換(続き) OCI クライアント・ OCI_ATTR_ バッファの CHARSET_ データ型 FORM データベース内の ターゲット列の データ型 変換元と変換先 コメント text NCHAR、 NVARCHAR2、 NCLOB OCI での、NLS_LANG キャラ クタ・セットとデータベー ス・キャラクタ・セット データベース・キャラク タ・セットを経由して変換 が行われるため、データが 消失する可能性があります。 SQLCS_ IMPLICIT データベース・サーバーで の、データベース・キャラク タ・セットと各国語キャラク タ・セット OCI Unicode のデータ拡張 データ変換によってデータが拡張し、バッファがオーバーフローする原因となる場合があり ます。バインド操作では、OCI_ATTR_MAXDATA_SIZE 属性をサーバー上に拡張後のデータ を格納するのに十分なサイズに設定する必要があります。この設定が困難な場合は、表ス キーマの変更を考慮する必要があります。定義操作では、拡張後のデータに対して十分な バッファ領域をクライアント・アプリケーションで割り当てる必要があります。バッファの サイズは、拡張後のデータの最大長に設定してください。次の計算で最大バッファ長を見積 もることができます。 1. 列データのバイト・サイズを取得します。 2. 取得したサイズに、クライアント・キャラクタ・セットの 1 文字当たりの最大バイト数 を乗算します。 この方法は最も簡単で速い方法ですが、正確ではないためメモリーを浪費する可能性があり ます。この方法は、キャラクタ・セットのすべての組合せに適用できます。たとえば、 UTF-16 データのバインドと定義の場合は、次の例でクライアント・バッファを計算します。 ub2 csid = OCI_UTF16ID; oratext *selstmt = "SELECT ename FROM emp"; counter = 1; ... OCIStmtPrepare(stmthp, errhp, selstmt, (ub4)strlen((char*)selstmt), OCI_NTV_SYNTAX, OCI_DEFAULT); OCIStmtExecute ( svchp, stmthp, errhp, (ub4)0, (ub4)0, (CONST OCISnapshot*)0, (OCISnapshot*)0, OCI_DESCRIBE_ONLY); OCIParamGet(stmthp, OCI_HTYPE_STMT, errhp, &myparam, (ub4)counter); OCIAttrGet((void*)myparam, (ub4)OCI_DTYPE_PARAM, (void*)&col_width, (ub4*)0, (ub4)OCI_ATTR_DATA_SIZE, errhp); ... maxenamelen = (col_width + 1) * sizeof(utext); cbuf = (utext*)malloc(maxenamelen); ... 7-18 Oracle Database グローバリゼーション・サポート・ガイド Unicode を使用した OCI プログラミング OCIDefineByPos(stmthp, &dfnp, errhp, (ub4)1, (void *)cbuf, (sb4)maxenamelen, SQLT_STR, (void *)0, (ub2 *)0, (ub2*)0, (ub4)OCI_DEFAULT); OCIAttrSet((void *) dfnp, (ub4) OCI_HTYPE_DEFINE, (void *) &csid, (ub4) 0, (ub4)OCI_ATTR_CHARSET_ID, errhp); OCIStmtFetch(stmthp, errhp, 1, OCI_FETCH_NEXT, OCI_DEFAULT); ... OCI での NLS_LANG キャラクタ・セットが UTF8 または AL32UTF8 の場合 OCI のクライアント・アプリケーションに対して NLS_LANG を設定することで、UTF8 と AL32UTF8 を使用できます。補助文字が不要な場合は、UTF8 または AL32UTF8 のいずれを 選択するかは問題ではありません。ただし、OCI アプリケーションで補助文字を処理する可 能性がある場合は、決定する必要があります。UTF8 でサポートされるのは最大 3 バイトの 文字のみのため、UTF8 では補助文字を表現できません。AL32UTF8 の場合、1 つの補助文 字は 1 コード・ポイント、つまり合計 4 バイトで表されます。 AL16UTF16 はサーバー用の各国語キャラクタ・セットであるため、NLS_LANG を AL16UTF16 に設定しないでください。UTF-16 を使用する必要がある場合は、データをバイ ンドまたは定義するときに、OCIAttrSet() 関数を使用してクライアント・キャラクタ・ セットを OCI_UTF16ID に指定してください。 OCI での SQL CHAR データ型のバインドと定義 SQL CHAR データ型を使用してデータをバインドおよび定義するための Unicode キャラク タ・セットを指定するには、OCIBind() または OCIDefine() API 後に、OCIAttrSet() 関数をコールして、適切なキャラクタ・セット ID を設定する必要があります。次に一般的 な 2 つの例を示します。 ■ OCIBind() または OCIDefine() の後に OCIAttrSet() をコールして、UTF-16 Unicode キャラクタ・セット・エンコーディングを指定します。次に例を示します。 ... ub2 csid = OCI_UTF16ID; utext ename[100]; /* enough buffer for ENAME */ ... /* Inserting Unicode data */ OCIBindByName(stmthp1, &bnd1p, errhp, (oratext*)":ENAME", (sb4)strlen((char *)":ENAME"), (void *) ename, sizeof(ename), SQLT_STR, (void *)&insname_ind, (ub2 *) 0, (ub2 *) 0, (ub4) 0, (ub4 *)0, OCI_DEFAULT); OCIAttrSet((void *) bnd1p, (ub4) OCI_HTYPE_BIND, (void *) &csid, (ub4) 0, (ub4)OCI_ATTR_CHARSET_ID, errhp); OCIAttrSet((void *) bnd1p, (ub4) OCI_HTYPE_BIND, (void *) &ename_col_len, (ub4) 0, (ub4)OCI_ATTR_MAXDATA_SIZE, errhp); ... /* Retrieving Unicode data */ Unicode を使用したプログラミング 7-19 Unicode を使用した OCI プログラミング OCIDefineByPos (stmthp2, &dfn1p, errhp, (ub4)1, (void *)ename, (sb4)sizeof(ename), SQLT_STR, (void *)0, (ub2 *)0, (ub2*)0, (ub4)OCI_DEFAULT); OCIAttrSet((void *) dfn1p, (ub4) OCI_HTYPE_DEFINE, (void *) &csid, (ub4) 0, (ub4)OCI_ATTR_CHARSET_ID, errhp); ... バインドされたバッファが utext データ型の場合は、OCIBind() または OCIDefine() のコール時にキャスト(text*)を追加する必要があります。 OCI_ATTR_MAXDATA_SIZE 属性の値は通常、サーバーのキャラクタ・セットの列サイ ズによって決まります。これは、このサイズが、バインド操作の際に変換用の一時的な バッファ領域をサーバーに割り当てるためにのみ使用されているためです。 ■ NLS_LANG キャラクタ・セットを UTF8 または AL32UTF8 として指定して、OCIBind() または OCIDefine() をコールします。 環境変数 NLS_LANG に UTF8 または AL32UTF8 を設定できます。Unicode を使用して いない場合と同様に、OCIBind() および OCIDefine() をコールします。環境変数 NLS_LANG を UTF8 または AL32UTF8 に設定し、次の OCI プログラムを実行します。 ... oratext ename[100]; /* enough buffer size for ENAME */ ... /* Inserting Unicode data */ OCIBindByName(stmthp1, &bnd1p, errhp, (oratext*)":ENAME", (sb4)strlen((char *)":ENAME"), (void *) ename, sizeof(ename), SQLT_STR, (void *)&insname_ind, (ub2 *) 0, (ub2 *) 0, (ub4) 0, (ub4 *)0, OCI_DEFAULT); OCIAttrSet((void *) bnd1p, (ub4) OCI_HTYPE_BIND, (void *) &ename_col_len, (ub4) 0, (ub4)OCI_ATTR_MAXDATA_SIZE, errhp); ... /* Retrieving Unicode data */ OCIDefineByPos (stmthp2, &dfn1p, errhp, (ub4)1, (void *)ename, (sb4)sizeof(ename), SQLT_STR, (void *)0, (ub2 *)0, (ub2*)0, (ub4)OCI_DEFAULT); ... 7-20 Oracle Database グローバリゼーション・サポート・ガイド Unicode を使用した OCI プログラミング OCI での SQL NCHAR データ型のバインドと定義 OCI 使用時は、UTF-16 のバインドまたは定義を使用して SQL NCHAR データ型にアクセスす ることをお薦めします。Oracle9i から、SQL NCHAR データ型は、UTF8 または AL16UTF16 のいずれかのエンコーディングを使用した Unicode データ型になっています。SQL NCHAR データ型のデータにアクセスするには、データ消失が発生しない適切なデータ変換が実行さ れるように、バインドまたは定義してから実行するまでに OCI_ATTR_CHARSET_FORM 属性 を SQLCS_NCHAR に設定します。SQL NCHAR データ型のデータ長は常に、Unicode コード 単位の数で表されます。 次のプログラムは、NCHAR データ列に対するデータの挿入とフェッチの一般的な例です。 ... ub2 csid = OCI_UTF16ID; ub1 cform = SQLCS_NCHAR; utext ename[100]; /* enough buffer for ENAME */ ... /* Inserting Unicode data */ OCIBindByName(stmthp1, &bnd1p, errhp, (oratext*)":ENAME", (sb4)strlen((char *)":ENAME"), (void *) ename, sizeof(ename), SQLT_STR, (void *)&insname_ind, (ub2 *) 0, (ub2 *) 0, (ub4) 0, (ub4 *)0, OCI_DEFAULT); OCIAttrSet((void *) bnd1p, (ub4) OCI_HTYPE_BIND, (void *) &cform, (ub4) 0, (ub4)OCI_ATTR_CHARSET_FORM, errhp); OCIAttrSet((void *) bnd1p, (ub4) OCI_HTYPE_BIND, (void *) &csid, (ub4) 0, (ub4)OCI_ATTR_CHARSET_ID, errhp); OCIAttrSet((void *) bnd1p, (ub4) OCI_HTYPE_BIND, (void *) &ename_col_len, (ub4) 0, (ub4)OCI_ATTR_MAXDATA_SIZE, errhp); ... /* Retrieving Unicode data */ OCIDefineByPos (stmthp2, &dfn1p, errhp, (ub4)1, (void *)ename, (sb4)sizeof(ename), SQLT_STR, (void *)0, (ub2 *)0, (ub2*)0, (ub4)OCI_DEFAULT); OCIAttrSet((void *) dfn1p, (ub4) OCI_HTYPE_DEFINE, (void *) &csid, (ub4) 0, (ub4)OCI_ATTR_CHARSET_ID, errhp); OCIAttrSet((void *) dfn1p, (ub4) OCI_HTYPE_DEFINE, (void *) &cform, (ub4) 0, (ub4)OCI_ATTR_CHARSET_FORM, errhp); ... Unicode を使用したプログラミング 7-21 Unicode を使用した OCI プログラミング OCI での CLOB Unicode データおよび NCLOB Unicode データのバインドと定義 CLOB または NCLOB の列に対して UTF-16 データの書込み(バインド)および読込み(定 義)を行うには、UTF-16 キャラクタ・セット ID を OCILobWrite() および OCILobRead() として指定する必要があります。UTF-16 データを CLOB 列に書き込むとき は、OCILobWrite() を次のようにコールしてください。 ... ub2 csid = OCI_UTF16ID; err = OCILobWrite (ctx->svchp, ctx->errhp, lobp, &amtp, offset, (void *) buf, (ub4) BUFSIZE, OCI_ONE_PIECE, (void *)0, (sb4 (*)()) 0, (ub2) csid, (ub1) SQLCS_IMPLICIT); amtp パラメータは、Unicode コード単位でのデータ長です。offset パラメータは、デー タ列の開始からのデータのオフセットを示しています。csid パラメータは、UTF-16 データ 用に設定する必要があります。 CLOB 列から UTF-16 データを読み込むには、OCILobRead() を次のようにコールします。 ... ub2 csid = OCI_UTF16ID; err = OCILobRead(ctx->svchp, ctx->errhp, lobp, &amtp, offset, (void *) buf, (ub4)BUFSIZE , (void *) 0, (sb4 (*)()) 0, (ub2)csid, (ub1) SQLCS_IMPLICIT); データ長は常に、Unicode コード単位の数で表されます。エンコーディングが UTF-16 であ るため、1 つの Unicode 補助文字は 2 コード単位としてカウントされます。LOB 列のバイン ドまたは定義後、OCILobGetLength() を使用して LOB 列に格納されているデータ長を測 定できます。UTF-16 としてデータをバインドまたは定義している場合、戻り値はコード単 位によるデータ長です。 err = OCILobGetLength(ctx->svchp, ctx->errhp, lobp, &lenp); NCLOB を使用している場合は、OCI_ATTR_CHARSET_FORM を SQLCS_NCHAR に設定する必 要があります。 7-22 Oracle Database グローバリゼーション・サポート・ガイド Unicode を使用した Pro*C/C++ プログラミング Unicode を使用した Pro*C/C++ プログラミング Pro*C/C++ には、データベースとの間で Unicode データの挿入や取出しを行う方法が 3 通 り用意されています。 ■ ■ ■ Pro*C/C++ の VARCHAR データ型またはネイティブな C/C++ の text データ型を使用す ると、UTF8 または AL32UTF8 データベースの SQL CHAR データ型で格納されている Unicode データにプログラムでアクセスできます。C/C++ のネイティブな text 型を プログラムで使用することもできます。 Pro*C/C++ の UVARCHAR データ型またはネイティブな C/C++ の utext データ型を使用 すると、データベースの NCHAR データ型で格納されている Unicode データにプログラ ムでアクセスできます。 Pro*C/C++ の NVARCHAR データ型を使用すると、NCHAR データ型で格納されている Unicode データにプログラムでアクセスできます。Pro*C/C++ プログラムでの UVARCHAR と NVARCHAR の相違は、UVARCHAR データ型のデータは utext バッファに 格納されているのに対して、NVARCHAR データ型のデータは text データ型で格納され ている点です。 Pro*C/C++ では、SQL テキストに対して Unicode OCI API を使用しません。そのため、埋 込み SQL テキストは、環境変数 NLS_LANG に指定されているキャラクタ・セットでエン コードする必要があります。 この項の内容は、次のとおりです。 ■ Unicode での Pro*C/C++ データ変換 ■ Pro*C/C++ での VARCHAR データ型の使用 ■ Pro*C/C++ での NVARCHAR データ型の使用 ■ Pro*C/C++ での UVARCHAR データ型の使用 Unicode を使用したプログラミング 7-23 Unicode を使用した Pro*C/C++ プログラミング Unicode での Pro*C/C++ データ変換 データ変換は OCI レイヤーで行われますが、Pro*C/C++ プログラムで使用されているデー タ型に基づいて、どの変換手順を使用するかを OCI に対して指示するのは、Pro*C/C++ プ リプロセッサです。表 7-4 に変換手順を示します。 表 7-4 Pro*C/C++ のバインドと定義でのデータ変換 Pro*C/C++ データ型 SQL データ型 変換手順 VARCHAR または text CHAR OCI で発生する、NLS_LANG キャラクタ・セットとデータベース・ キャラクタ・セットの間の変換 VARCHAR または text NCHAR OCI で発生する、NLS_LANG キャラクタ・セットとデータベース・ キャラクタ・セットの間の変換 データベース・サーバーで発生する、データベース・キャラクタ・ セットと各国語キャラクタ・セットの間の変換 NVARCHAR NCHAR OCI で発生する、NLS_LANG キャラクタ・セットと各国語キャラク タ・セットの間の変換 NVARCHAR CHAR OCI で発生する、NLS_LANG キャラクタ・セットと各国語キャラク タ・セットの間の変換 データベース・サーバーでの、各国語キャラクタ・セットとデータ ベース・キャラクタ・セットの間の変換 UVARCHAR または utext NCHAR UVARCHAR または utext CHAR OCI で発生する、UTF-16 と各国語キャラクタ・セットの間の変換 OCI で発生する、UTF-16 と各国語キャラクタ・セットの間の変換 データベース・サーバーで発生する、各国語キャラクタ・セットか らデータベース・キャラクタ・セットへの変換 7-24 Oracle Database グローバリゼーション・サポート・ガイド Unicode を使用した Pro*C/C++ プログラミング Pro*C/C++ での VARCHAR データ型の使用 Pro*C/C++ の VARCHAR データ型は、length フィールドと text バッファ・フィールド付 きの構造体に事前処理されます。次の例では、C/C++ のシステム固有のデータ型 text と Pro*C/C++ の VARCHAR データ型を使用して、表の列をバインドおよび定義します。 #include <sqlca.h> main() { ... /* Change to STRING datatype: */ EXEC ORACLE OPTION (CHAR_MAP=STRING) ; text ename[20] ; /* unsigned short type */ varchar address[50] ; /* Pro*C/C++ varchar type */ EXEC SQL SELECT ename, address INTO :ename, :address FROM emp; /* ename is NULL-terminated */ printf(L"ENAME = %s, ADDRESS = %.*s¥n", ename, address.len, address.arr); ... } Pro*C/C++ プログラムで VARCHAR データ型またはシステム固有の text データ型を使用す ると、プリプロセッサでは、そのプログラムがデータベースの SQL NCHAR データ型ではな く、SQL CHAR データ型の列にアクセスしているとみなします。次に、プリプロセッサは、 SQLCS_IMPLICIT 値を使用してバインドまたは定義することで、この動きを反映するため の C/C++ コードを OCI_ATTR_CHARSET_FORM 属性に対して生成します。その結果、バイ ンド変数または定義変数がデータベースの SQL NCHAR データ型の列にバインドされると、 データベース・サーバーでの暗黙的な変換によって、データベース・キャラクタ・セットと 各国語データベース・キャラクタ・セットの間でデータの変換が行われます。データベー ス・キャラクタ・セットが各国語キャラクタ・セットより小さい場合は、変換時にデータが 消失します。 Pro*C/C++ での NVARCHAR データ型の使用 Pro*C/C++ の NVARCHAR データ型は、Pro*C/C++ の VARCHAR データ型と類似しています。 データベースの SQL NCHAR データ型にアクセスするために使用する必要があります。この データ型は、SQL NCHAR データ型の列にテキスト・バッファをバインドまたは定義するよ うに Pro*C/C++ プリプロセッサに通知します。プリプロセッサは、バインド変数または定 義変数の OCI_ATTR_CHARSET_FORM 属性に SQLCS_NCHAR 値を指定します。この結果、 データベースで暗黙的な変換は行われません。 SQL CHAR データ型の列に対して NVARCHAR バッファがバインドされると、(NLS_LANG キャラクタ・セットでエンコードされている)NVARCHAR バッファのデータは、OCI で各国 語キャラクタ・セットとの変換が行われ、次に、データベース・サーバーでデータベース・ キャラクタ・セットに変換されます。NLS_LANG キャラクタ・セットがデータベース・キャ ラクタ・セットより大きい場合は、データが消失する可能性があります。 Unicode を使用したプログラミング 7-25 Unicode を使用した Pro*C/C++ プログラミング Pro*C/C++ での UVARCHAR データ型の使用 UVARCHAR データ型は、length フィールドと utext バッファ・フィールド付きの構造体 に事前処理されます。次のコード例には、2 つのホスト変数 ename と address が含まれて います。ename ホスト変数は、Unicode 文字を 20 文字格納する utext バッファとして宣言 されています。address ホスト変数は、Unicode 文字を 50 文字格納する uvarchar バッ ファとして宣言されています。len フィールドと arr フィールドは、構造体のフィールド としてアクセス可能です。 #include <sqlca.h> #include <sqlucs2.h> main() { ... /* Change to STRING datatype: */ EXEC ORACLE OPTION (CHAR_MAP=STRING) ; utext ename[20] ; /* unsigned short type */ uvarchar address[50] ; /* Pro*C/C++ uvarchar type */ EXEC SQL SELECT ename, address INTO :ename, :address FROM emp; /* ename is NULL-terminated */ wprintf(L"ENAME = %s, ADDRESS = %.*s¥n", ename, address.len, address.arr); ... } Pro*C/C++ プログラムで UVARCHAR データ型またはシステム固有の utext データ型を使用 すると、プリプロセッサでは、プログラムが SQL NCHAR データ型にアクセスしているとみ なします。次に、プリプロセッサは、SQLCS_NCHAR 値を使用してバインドまたは定義する ことで、OCI_ATTR_CHARSET_FORM 属性に対する C/C++ コードを生成します。この結果、 バインド変数または定義変数が SQL NCHAR データ型の列にバインドされると、データベー ス・サーバーでは各国語キャラクタ・セットからのデータの暗黙的な変換が行われます。た だし、各国語キャラクタ・セットは常にデータベース・キャラクタ・セットより大きいた め、この状況でデータが消失することはありません。 7-26 Oracle Database グローバリゼーション・サポート・ガイド Unicode を使用した JDBC プログラミング Unicode を使用した JDBC プログラミング Oracle には、Oracle データベースの文字データに Java プログラムでアクセスするために次 の JDBC ドライバが用意されています。 ■ JDBC OCI ドライバ ■ JDBC Thin ドライバ ■ サーバー側 JDBC 内部ドライバ ■ サーバー側 JDBC Thin ドライバ Java プログラムでは、SQL CHAR データ型および NCHAR データ型の列との間で文字データ の挿入や取出しを行うことができます。特に、JDBC を使用すると、Java プログラムで Java 文字列を SQL CHAR データ型および NCHAR データ型にバインドしたり定義できます。Java の string データ型は UTF-16 でエンコードされているため、データベースとの間で取り出 したり挿入するデータは、UTF-16 とデータベース・キャラクタ・セットまたは各国語キャ ラクタ・セット間で変換する必要があります。また、JDBC を使用すると、PL/SQL 文と SQL 文を Java 文字列に指定できるため、非 ASCII スキーマ・オブジェクト名と文字列リテ ラルを参照できます。 データベースの接続時、JDBC は、サーバーの NLS_LANGUAGE および NLS_TERRITORY パ ラメータを、JDBC ドライバを実行する Java VM のロケールに対応する値に設定します。こ の操作により、サーバーと Java クライアントが確実に同じ言語で通信できるようになりま す。その結果、サーバーから戻される Oracle エラー・メッセージは、クライアントのロ ケールと同じ言語になります。 この項の内容は、次のとおりです。 ■ SQL CHAR データ型への Java 文字列のバインドと定義 ■ SQL NCHAR データ型への Java 文字列のバインドと定義 ■ コード変更なしの SQL NCHAR データ型の使用方法 ■ JDBC ドライバのデータ変換 ■ Oracle オブジェクト型の oracle.sql.CHAR の使用 ■ JDBC を使用した場合の SQL CHAR データへのアクセスの制限 Unicode を使用したプログラミング 7-27 Unicode を使用した JDBC プログラミング SQL CHAR データ型への Java 文字列のバインドと定義 Oracle JDBC ドライバを使用すると、Java 文字列のバインド変数または定義変数を使用し て、データベースの SQL CHAR データ型にアクセスできます。次のコードは、Java 文字列を CHAR 列にバインドする方法を示しています。 int employee_id = 12345; String last_name = "Joe"; PreparedStatement pstmt = conn.prepareStatement("INSERT INTO" + "employees (last_name, employee_id) VALUES (?, ?)"); pstmt.setString(1, last_name); pstmt.setInt(2, employee_id); pstmt.execute(); /* execute to insert into first row */ employee_id += 1; /* next employee number */ last_name = "¥uFF2A¥uFF4F¥uFF45"; /* Unicode characters in name */ pstmt.setString(1, last_name); pstmt.setInt(2, employee_id); pstmt.execute(); /* execute to insert into second row */ ターゲット SQL 列は、そのデータ型と長さを指定することで定義できます。データ型と長 さを指定して SQL CHAR 列を定義すると、JDBC ではこの情報を使用して SQL CHAR 列から データをフェッチする操作のパフォーマンスが最適化されます。次に、SQL CHAR 列の定義 例を示します。 OraclePreparedStatement pstmt = (OraclePreparedStatement) conn.prepareStatement("SELECT ename, empno from emp"); pstmt.defineColumnType(1,Types.VARCHAR, 3); pstmt.defineColumnType(2,Types.INTEGER); ResultSet rest = pstmt.executeQuery(); String name = rset.getString(1); int id = reset.getInt(2); PreparedStatement を OraclePreparedStatement にキャストして、 defineColumnType() をコールする必要があります。defineColumnType() の 2 番目の パラメータは、ターゲット SQL 列のデータ型です。3 番目のパラメータは、文字数による長 さです。 7-28 Oracle Database グローバリゼーション・サポート・ガイド Unicode を使用した JDBC プログラミング SQL NCHAR データ型への Java 文字列のバインドと定義 Java 文字列の変数を SQL NCHAR データ型にバインドまたは定義するために、Oracle には setFormOfUse() メソッドを含む拡張 PreparedStatement が用意されています。このメ ソッドを使用して、バインド変数のターゲット列が SQL NCHAR データ型であることを明示 的に指定できます。次のコードは、Java 文字列を NCHAR 列にバインドする方法を示してい ます。 int employee_id = 12345; String last_name = "Joe" oracle.jdbc.OraclePreparedStatement pstmt = (oracle.jdbc.OraclePreparedStatement) conn.prepareStatement("INSERT INTO employees (last_name, employee_id) VALUES (?, ?)"); pstmt.setFormOfUse(1, oracle.jdbc.OraclePreparedStatement.FORM_NCHAR); pstmt.setString(1, last_name); pstmt.setInt(2, employee_id); pstmt.execute(); /* execute to insert into first row */ employee_id += 1; /* next employee number */ last_name = "¥uFF2A¥uFF4F¥uFF45"; /* Unicode characters in name */ pstmt.setString(1, last_name); pstmt.setInt(2, employee_id); pstmt.execute(); /* execute to insert into second row */ ターゲットの SQL NCHAR 列は、そのデータ型、使用フォームおよび長さを指定することで 定義できます。JDBC では、この情報を使用して、これらの列から SQL NCHAR データを フェッチする操作のパフォーマンスが最適化されます。次に、SQL NCHAR 列の定義例を示 します。 OraclePreparedStatement pstmt = (OraclePreparedStatement) conn.prepareStatement("SELECT ename, empno from emp"); pstmt.defineColumnType(1,Types.VARCHAR, 3, OraclePreparedStatement.FORM_NCHAR); pstmt.defineColumnType(2,Types.INTEGER); ResultSet rest = pstmt.executeQuery(); String name = rset.getString(1); int id = reset.getInt(2); SQL NCHAR 列を定義するには、defineColumnType() の最初の引数に SQL CHAR 列と等 価のデータ型を指定し、第 2 の引数に文字数による長さを指定し、第 4 の引数に使用フォー ムを指定する必要があります。 使用フォームの引数を明示的に指定しなくても、NCHAR 列に Java 文字列をバインドまたは 定義できます。その場合は、次のことに注意してください。 Unicode を使用したプログラミング 7-29 Unicode を使用した JDBC プログラミング ■ ■ setString() メソッドに引数を指定しないと、JDBC はバインド変数または定義変数が SQL CHAR 列用であるとみなします。その結果、JDBC はこれらの変数をデータベース・ キャラクタ・セットに変換しようとします。データがデータベースに到着すると、その データベースはデータベース・キャラクタ・セットのデータを各国語キャラクタ・セッ トに暗黙的に変換します。データベース・キャラクタ・セットが各国語キャラクタ・ セットのサブセットの場合は、この変換時にデータが消失する可能性があります。各国 語キャラクタ・セットは UTF8 または AL16UTF16 であるため、データベース・キャラ クタ・セットが UTF8 または AL32UTF8 以外の場合、データは消失します。 SQL CHAR データ型から SQL NCHAR データ型への暗黙的な変換はデータベースで行われ るため、データベースのパフォーマンスが低下します。 また、SQL CHAR データ型の列に Java 文字列をバインドまたは定義しても、使用フォームの 引数を指定すると、データベースのパフォーマンスが低下します。ただし、各国語キャラク タ・セットは常にデータベース・キャラクタ・セットより大きいため、データが消失するこ とはありません。 コード変更なしの SQL NCHAR データ型の使用方法 Java アプリケーションで使用フォームの引数をデフォルトで指定するかどうかを指示できる ように、Oracle JDBC ドライバにはグローバル・フラグが導入されています。このフラグの 用途は次のとおりです。 ■ ■ SQL CHAR データ型にアクセスする既存のアプリケーションは、SQL NCHAR データ型を サポートするように移行できます。これにより、コード行を変更せずに世界中に配置で きるようになります。 アプリケーションでは、SQL NCHAR 列をバインドおよび定義するときに、 setFormOfUse() メソッドをコールする必要はありません。アプリケーション・コー ドは、バックエンド・データベースで使用中のデータ型に依存せずにそのまま使用でき ます。このフラグを使用すると、アプリケーションを SQL CHAR または SQL NCHAR の 使用から簡単に移行できます。 グローバル・フラグは、Java アプリケーションを起動するコマンドラインで指定します。こ のフラグを指定する構文は、次のとおりです。 java -Doracle.jdbc.defaultNChar=true <application class> このフラグを指定すると、Oracle JDBC ドライバでは、アプリケーションのすべてのバイン ドおよび定義操作に使用フォームの引数が存在するものとみなされます。 データベース・スキーマが SQL CHAR 列と SQL NCHAR 列の両方で構成されている場合は、 このフラグを使用すると、データベース・サーバーで暗黙的な変換が実行されるため、SQL CHAR 列へのアクセス時にパフォーマンスが低下することがあります。 関連項目 : 暗黙的な変換によるパフォーマンス低下の詳細は、7-31 ペー ジの「JDBC ドライバのデータ変換」を参照してください。 7-30 Oracle Database グローバリゼーション・サポート・ガイド Unicode を使用した JDBC プログラミング JDBC ドライバのデータ変換 Java 文字列は常に UTF-16 でエンコードされているため、JDBC ドライバは、データベー ス・キャラクタ・セットから UTF-16 または各国語キャラクタ・セットにデータを透過的に 変換します。変換手順は、JDBC ドライバごとにそれぞれ異なります。 ■ OCI ドライバ用のデータ変換 ■ Thin ドライバ用のデータ変換 ■ サーバー側内部ドライバ用のデータ変換 OCI ドライバ用のデータ変換 OCI ドライバの場合、SQL 文はデータベースに送信され処理される前に、ドライバによって 常にデータベース・キャラクタ・セットに変換されます。データベース・キャラクタ・セッ トが US7ASCII でも WE8ISO8859P1 でもない場合、ドライバはまず SQL 文を Java で UTF-8 に変換し、その後 C でデータベース・キャラクタ・セットに変換します。それ以外の場合 は、SQL 文をデータベース・キャラクタ・セットに直接変換します。Java 文字列のバインド 変数または定義変数については、表 7-5 に様々な状況に対応する変換手順が要約されていま す。 表 7-5 OCI ドライバの変換手順 使用フォーム SQL データ型 変換手順 Const.CHAR (デフォルト) CHAR JDBC ドライバで発生する、Java 文字列とデータベース・キャラクタ・セットの 間の変換 Const.CHAR (デフォルト) NCHAR JDBC ドライバで発生する、Java 文字列とデータベース・キャラクタ・セットの 間の変換 データベース・サーバーで発生する、データベース・キャラクタ・セットと各 国語キャラクタ・セットの間のデータ変換 Const.NCHAR NCHAR JDBC ドライバで発生する、Java 文字列と各国語キャラクタ・セットの間の変換 Const.NCHAR CHAR JDBC ドライバで発生する、Java 文字列と各国語キャラクタ・セットの間の変換 データベース・サーバーで発生する、各国語キャラクタ・セットとデータベー ス・キャラクタ・セットの間のデータ変換 Unicode を使用したプログラミング 7-31 Unicode を使用した JDBC プログラミング Thin ドライバ用のデータ変換 SQL 文は、データベースに送信され処理される前に、ドライバによって常にデータベース・ キャラクタ・セットまたは UTF-8 のいずれかに変換されます。データベース・キャラクタ・ セットが US7ASCII または WE8ISO8859P1 の場合、ドライバは SQL 文をデータベース・ キャラクタ・セットに変換します。それ以外の場合、ドライバは SQL 文を UTF-8 に変換し、 データベースに対して SQL 文を処理するにはさらに変換が必要であることを通知します。 その場合、データベースは SQL 文を UTF-8 からデータベース・キャラクタ・セットに変換 します。Java 文字列のバインド変数または定義変数の場合、Thin ドライバに対しては、表 7-6 に示されている変換手順が使用されます。 表 7-6 Thin ドライバの変換手順 使用フォーム SQL データ型 データベース・ キャラクタ・セット 変換手順 Const.CHAR (デフォルト) CHAR US7ASCII または WE8ISO8859P1 Thin ドライバで発生する、Java 文字列とデータベース・ キャラクタ・セットの間の変換 Const.CHAR (デフォルト) NCHAR US7ASCII または WE8ISO8859P1 Thin ドライバで発生する、Java 文字列とデータベース・ キャラクタ・セットの間の変換 データベース・サーバーで発生する、データベース・キャ ラクタ・セットと各国語キャラクタ・セットの間のデータ 変換 Const.CHAR (デフォルト) CHAR Const.CHAR (デフォルト) NCHAR Const.NCHAR CHAR 非 ASCII および 非 WE8ISO8859P1 非 ASCII および 非 WE8ISO8859P1 Thin ドライバで発生する、Java 文字列と UTF-8 の間の変換 データベース・サーバーで発生する、UTF-8 とデータベー ス・キャラクタ・セットの間のデータ変換 Thin ドライバで発生する、Java 文字列と UTF-8 の間の変換 データベース・サーバーで発生する、UTF-8 と各国語キャ ラクタ・セットの間のデータ変換 Thin ドライバで発生する、Java 文字列と各国語キャラク タ・セットの間の変換 データベース・サーバーで発生する、各国語キャラクタ・ セットとデータベース・キャラクタ・セットの間のデータ 変換 Const.NCHAR NCHAR Thin ドライバで発生する、Java 文字列と各国語キャラク タ・セットの間の変換 サーバー側内部ドライバ用のデータ変換 サーバー側内部ドライバはデータベース内部で動作するため、すべてのデータ変換はデータ ベース・サーバーで行われます。 7-32 Oracle Database グローバリゼーション・サポート・ガイド Unicode を使用した JDBC プログラミング Oracle オブジェクト型の oracle.sql.CHAR の使用 JDBC ドライバは Oracle オブジェクト型をサポートしています。Oracle オブジェクトは、 データベース・キャラクタ・セットまたは各国語キャラクタ・セットで表現したオブジェク トとして、常にデータベースからクライアントに送信されます。つまり、7-31 ページの 「JDBC ドライバのデータ変換」に示したデータ変換の流れは、Oracle オブジェクトのアクセ スには適用されないことを意味します。かわりに、データベースからクライアントにオブ ジェクト型の SQL CHAR および SQL NCHAR データを送信するために、oracle.sql.CHAR クラスが使用されます。 この項の内容は、次のとおりです。 ■ oracle.sql.CHAR ■ oracle.sql.CHAR を使用した SQL CHAR 属性と NCHAR 属性へのアクセス oracle.sql.CHAR oracle.sql.CHAR クラスには、文字データを変換するための特別な機能があります。 Oracle キャラクタ・セットは、oracle.sql.CHAR クラスの主な属性です。 oracle.sql.CHAR オブジェクトの構成時には、常に Oracle キャラクタ・セットが渡され ます。既知のキャラクタ・セットがない場合、oracle.sql.CHAR オブジェクトのデータの バイトには意味がありません。 oracle.sql.CHAR クラスは、文字データを文字列に変換するために、次のメソッドを提供 します。 ■ getString() oracle.sql.CHAR オブジェクトが表現する一連の文字を文字列に変換し、Java 文字 列オブジェクトを戻します。キャラクタ・セットが認識されない場合、getString() は SQLException を戻します。 ■ toString() getString() に類似していますが、キャラクタ・セットが認識されない場合、 toString() は oracle.sql.CHAR データを 16 進表現で戻し、SQLException は戻 しません。 ■ getStringWithReplacement() getString() に類似していますが、この oracle.sql.CHAR オブジェクトのキャラク タ・セットに Unicode 表現のない文字は、デフォルトの置換文字で置き換えられます。 デフォルトの置換文字は、キャラクタ・セットによって異なりますが、通常は疑問符 (?)です。 oracle.sql.CHAR オブジェクトを(プリコンパイルされた SQL 文に渡すなどの目的で) 手動で構成できます。oracle.sql.CHAR オブジェクトを構成する場合は、 oracle.sql.CharacterSet クラスのインスタンスを使用して、oracle.sql.CHAR オブ ジェクトにキャラクタ・セット情報を提供する必要があります。 Unicode を使用したプログラミング 7-33 Unicode を使用した JDBC プログラミング oracle.sql.CharacterSet クラスの各インスタンスは、Oracle でサポートしているキャ ラクタ・セットの 1 つを表します。 次のタスクを実行して oracle.sql.CHAR オブジェクトを構成します。 1. 静的 CharacterSet.make() メソッドをコールして、CharacterSet インスタンスを 作成します。これは、キャラクタ・セットのクラスを作成するメソッドです。入力とし て有効な Oracle キャラクタ・セット(OracleId)が必要です。次に例を示します。 int OracleId = CharacterSet.JA16SJIS_CHARSET; // this is character set 832 ... CharacterSet mycharset = CharacterSet.make(OracleId); Oracle でサポートされている各キャラクタ・セットには、一意の事前定義済み OracleId があります。OracleId は、Oracle_character_set_name_CHARSET と して指定したキャラクタ・セットとしていつでも参照できます。Oracle_character_ set_name は、Oracle キャラクタ・セットです。 2. oracle.sql.CHAR オブジェクトを構成します。コンストラクタに、文字列(または文 字列を表現するバイト)と、キャラクタ・セットに基づくバイトの解析方法を示す CharacterSet オブジェクトを渡します。次に例を示します。 String mystring = "teststring"; ... oracle.sql.CHAR mychar = new oracle.sql.CHAR(teststring, mycharset); oracle.sql.CHAR クラスには複数のコンストラクタがあり、CharacterSet オブ ジェクトとともに文字列、バイト配列またはオブジェクトを入力としてとることができ ます。文字列の場合は、oracle.sql.CHAR オブジェクトに置かれる前に、 CharacterSet オブジェクトが示すキャラクタ・セットに変換されます。 サーバー(データベース)とクライアント(またはクライアントで実行中のアプリケーショ ン)は、異なるキャラクタ・セットを使用できます。このクラスのメソッドを使用してサー バーとクライアントの間でデータを転送する場合、JDBC ドライバはサーバー・キャラク タ・セットとクライアント・キャラクタ・セットの間でデータを変換する必要があります。 7-34 Oracle Database グローバリゼーション・サポート・ガイド Unicode を使用した JDBC プログラミング oracle.sql.CHAR を使用した SQL CHAR 属性と NCHAR 属性へのアクセス 次に、SQL でオブジェクト型を作成する例を示します。 CREATE TYPE person_type AS OBJECT (name VARCHAR2(30), address NVARCHAR(256), age NUMBER); CREATE TABLE employees (id NUMBER, person PERSON_TYPE); このオブジェクト型に対応する Java クラスは、次のように構成できます。 public class person implement SqlData { oracle.sql.CHAR name; oracle.sql.CHAR address; oracle.sql.NUMBER age; // SqlData interfaces getSqlType() {...} writeSql(SqlOutput stream) {...} readSql(SqlInput stream, String sqltype) {...} } ここでは、oracle.sql.CHAR クラスは、Oracle オブジェクト型の NAME 属性(VARCHAR2 データ型)にマップするために使用されています。JDBC は、このクラスに、データベース の VARCHAR2 データのバイト表現およびデータベース・キャラクタ・セットに対応する CharacterSet オブジェクトを導入します。次のコードでは、employees 表から person オブジェクトを取り出しています。 TypeMap map = ((OracleConnection)conn).getTypeMap(); map.put("PERSON_TYPE", Class.forName("person")); conn.setTypeMap(map); . . . . . . ResultSet rs = stmt.executeQuery( "SELECT PERSON FROM EMPLOYEES"); rs.next(); person p = (person) rs.getObject(1); oracle.sql.CHAR sql_name = p.name; oracle.sql.CHAR sql_address=p.address; String java_name = sql_name.getString(); String java_address = sql_address.getString(); oracle.sql.CHAR クラスの getString() メソッドは、Oracle の Java データ変換クラス をコールして Java 文字列を戻すことで、データベース・キャラクタ・セットまたは各国語 キャラクタ・セットのバイト配列を UTF-16 に変換します。rs.getObject(1) コールが動 作するように、SqlData インタフェースをクラス person に実装し、オブジェクト型 PERSON_TYPE の Java クラスへのマッピングを示すように Typemap map を設定する必要が あります。 Unicode を使用したプログラミング 7-35 Unicode を使用した JDBC プログラミング JDBC を使用した場合の SQL CHAR データへのアクセスの制限 この項の内容は、次のとおりです。 ■ JDBC Thin ドライバを使用した場合の SQL CHAR データ・サイズの制限 ■ マルチバイト・データベース環境での文字整合性の問題 JDBC Thin ドライバを使用した場合の SQL CHAR データ・サイズの制限 データベース・キャラクタ・セットが ASCII(US7ASCII)または ISO Latin-1 (WE8ISO8859P1)のいずれでもない場合、JDBC Thin ドライバでは、SQL CHAR のバイン ド・パラメータに対して、通常のデータベース・サイズ制限より厳しい制限を設定する必要 があります。このサイズ制限は、変換時のデータ拡張を許容するために必要な制限です。 JDBC Thin ドライバは、setXXX() メソッド(setCharacterStream() メソッド以外)が コールされるときに、SQL CHAR のバインド・サイズをチェックします。データ・サイズが サイズ制限を超えている場合、ドライバは、setXXX() コールから SQL 例外(データ・サ イズがこの型の最大サイズを超えています。)を戻します。この制限は、文字データ変換で データ長が増加した場合に、データの破損を防ぐために必要です。この制限は、次の場合に 規定されます。 ■ ■ ■ ■ JDBC Thin ドライバを使用する (定義ではなく)バインドを使用する SQL CHAR データ型を使用する キャラクタ・セットが ASCII(US7ASCII)または ISO Latin-1(WE8ISO8859P1)のいず れでもないデータベースに接続する データベース・キャラクタ・セットが US7ASCII または WE8ISO8859P1 のいずれでもない 場合、JDBC Thin ドライバは、SQL CHAR のバインドに対して、Java UTF-16 の文字を UTF-8 エンコーディング・バイトに変換します。次に、UTF-8 エンコーディング・バイトは データベースに転送され、データベース・キャラクタ・セット・エンコーディングに変換さ れます。 このキャラクタ・セット・エンコーディングへの変換によって、データの格納に必要なバイ ト数が増えることがあります。データベース・キャラクタ・セットの拡張因数は、UTF-8 か らキャラクタ・セットへの変換での最大拡張率を示します。データベース・キャラクタ・ セットが UTF8 または AL32UTF8 の場合、拡張因数(exp_factor)は 1 です。それ以外 の場合、拡張因数はデータベース・キャラクタ・セットの最大文字サイズ(バイト単位)で す。 表 7-7 に、SQL CHAR データのデータベース・サイズ制限、および SQL CHAR バインドの JDBC Thin ドライバ・サイズ制限の計算式を示します。データベースの制限はバイト単位で す。計算式によって、UTF-8 エンコーディングの最大許容サイズ(バイト単位)を判断しま す。 7-36 Oracle Database グローバリゼーション・サポート・ガイド Unicode を使用した JDBC プログラミング 表 7-7 SQL CHAR の最大バインド・サイズ データ型 データベースの最大許容バインド・ サイズ 最大バインド・サイズを判断するための計算式 (UTF-8 のバイト単位) CHAR 2000 バイト 4000/exp_factor VARCHAR2 4000 バイト 4000/exp_factor LONG 231 - 1 バイト (231 - 1)/exp_factor この計算式は、データが UTF-8 からデータベース・キャラクタ・セットに変換された後、サ イズがデータベースの最大許容サイズを超えないことを保証します。 サポート可能な UTF-16 の文字数は、データの 1 文字当たりのバイト数によって異なります。 UTF-8 エンコーディングでは、ASCII 文字はすべて 1 バイトです。他のキャラクタ・タイプ は、2 バイトや 3 バイトの場合があります。 表 7-8 に、一般的なサーバー・キャラクタ・セットの拡張因数を示します。この表は、各 キャラクタ・セットの CHAR および VARCHAR2 データに関する JDBC Thin ドライバの最大 バインド・サイズも示しています。 表 7-8 一般的なサーバー・キャラクタ・セットの拡張因数と最大バインド・サイズ サーバー・キャラクタ・ セット 拡張因数 SQL CHAR データに関する JDBC Thin ドライバの 最大バインド・サイズ(UTF-8 のバイト単位) 最大バインド・サイズ( WE8DEC 1 4000 バイト JA16SJIS 2 2000 バイト JA16EUC 3 1333 バイト AL32UTF8 1 4000 バイト マルチバイト・データベース環境での文字整合性の問題 Oracle JDBC ドライバは、文字データがデータベースに挿入された場合またはデータベース から取り出された場合に、適切なキャラクタ・セット変換を実行します。このドライバは、 Java クライアントが使用する Unicode 文字と Oracle データベース・キャラクタ・セットの 間の変換を行います。Java Unicode キャラクタ・セットとデータベース・キャラクタ・セッ トの間のラウンドトリップ変換で、Java に戻された文字データは、情報の一部が消失してい る場合があります。この一部消失は、複数の Unicode 文字が、データベース・キャラクタ・ セットの 1 つの文字にマップされた場合に発生します。たとえば、Unicode の全角のチルド 付き文字(0xFF5E)が、Oracle の JA16SJIS キャラクタ・セットにマップされている場合が あります。Unicode 文字のラウンドトリップ変換で、この Unicode 文字は 0x301C となりま す。これは波形のダッシュ(日本語で、一般的に範囲を示す場合に使用されます)で、チル ドではありません。 Unicode を使用したプログラミング 7-37 Unicode を使用した JDBC プログラミング 図 7-2 に、チルド文字のラウンドトリップ変換を示します。 図 7-2 文字整合性 この問題は、Oracle の JDBC のバグではありません。異なるオペレーティング・システムで の文字マッピング仕様が不確定であるために発生する問題です。この問題は、一部の Oracle キャラクタ・セット(JA16SJIS、JA16EUC、ZHT16BIG5 および KO16KS5601)の、わずか な文字についてのみ発生します。問題を回避するために、これらの文字に対する完全なラウ ンドトリップ変換は避けてください。 7-38 Oracle Database グローバリゼーション・サポート・ガイド Unicode を使用した ODBC と OLE DB のプログラミング Unicode を使用した ODBC と OLE DB のプログラミング Windows プラットフォームを使用している場合は、Oracle サーバーへのアクセスに Oracle ODBC ドライバまたは Oracle Provider for OLE DB を使用する必要があります。この項で は、これらのドライバによる Unicode のサポート方法を説明します。この章の内容は、次の とおりです。 ■ ODBC と OLE DB の Unicode 対応ドライバ ■ Unicode での OCI 依存性 ■ Unicode での ODBC と OLE DB のコード変換 ■ ODBC の Unicode データ型 ■ OLE DB の Unicode データ型 ■ ADO アクセス ODBC と OLE DB の Unicode 対応ドライバ Oracle の ODBC ドライバと Oracle Provider for OLE DB は、データを消失することなく、 Unicode データを正しく処理できます。たとえば、日本語フォントと日本語文字を入力する ための IME をインストールしている場合は日本語データが含まれた Unicode ODBC アプリ ケーションを英語版 Windows で実行できます。 Oracle が提供している ODBC および OLE DB 製品は、Windows プラットフォーム専用で す。UNIX プラットフォームについては、ベンダーにお問い合せください。 Unicode での OCI 依存性 Unicode データを処理するために、ODBC ドライバと OLE DB ドライバは、OCI Unicode の バインド機能と定義機能を使用します。OCI Unicode データのバインド機能と定義機能は NLS_LANG の影響を受けません。つまり、プラットフォームの NLS_LANG 設定に関係なく、 Unicode データは正しく処理されます。 関連項目 : 7-14 ページ「Unicode を使用した OCI プログラミング」 Unicode での ODBC と OLE DB のコード変換 通常は、サーバーと異なるデータ型をクライアントのデータ型に指定しないかぎり、冗長な データ変換は発生しません。たとえば、Unicode バッファ SQL_C_WCHAR を NCHAR などの Unicode データ列にバインドすると、ODBC ドライバと OLE DB ドライバは、アプリケー ションと OCI レイヤー間の変換を行いません。 フェッチする前にデータ型を指定せずに、クライアントのデータ型で SQLGetData をコー ルすると、表 7-9 の変換が行われます。 Unicode を使用したプログラミング 7-39 Unicode を使用した ODBC と OLE DB のプログラミング 表 7-9 ODBC の暗黙的なバインド・コード変換 ODBC クライアント・ データベース内の バッファのデータ型 ターゲット列のデータ型 フェッチ時の変換 SQL_C_WCHAR CHAR、 VARCHAR2、 CLOB データベース・キャラクタ・セット が NLS_LANG キャラクタ・セットの サブセットである場合、変換は次の 順序で行われます。 ■ SQL_C_CHAR CHAR、 VARCHAR2、 CLOB データベース・キャラクタ・ セット ■ NLS_LANG ■ OCI での UTF-16 ■ ODBC での UTF-16 コメント 予期しないデータ消失は ありません。 データベース・キャラクタ・ セットが NLS_LANG キャラ クタ・セットのサブセット である場合は、パフォーマ ンスが低下する可能性があ ります。 データベース・キャラクタ・セット 予期しないデータ消失は が NLS_LANG キャラクタ・セットの ありません。 サブセットの場合 : データベース・キャラクタ・ OCI での、データベース・キャラク セットが NLS_LANG キャラ タ・セットから NLS_LANG への変換 クタ・セットのサブセット でない場合は、パフォーマ データベース・キャラクタ・セット ンスが低下する可能性があ が NLS_LANG キャラクタ・セットの ります。 サブセットでない場合 : OCI と ODBC での、データベース・ キャラクタ・セット、UTF-16 から NLS_LANG キャラクタ・セットへの 変換 挿入操作と更新操作のためには、データ型を指定する必要があります。 ODBC クライアント・バッファのデータ型は、SQLGetData のコール時に提供されますが、 即時ではありません。このため、SQLFetch には情報はありません。 ODBC ドライバではデータ整合性が保証されるため、暗黙的なバインドを実行すると、冗長 な変換が行われ、パフォーマンスが低下する場合があります。明示的なバインドでパフォー マンスを優先するか、暗黙的なバインドで利便性を優先するかのいずれかを選択します。 7-40 Oracle Database グローバリゼーション・サポート・ガイド Unicode を使用した ODBC と OLE DB のプログラミング OLE DB のコード変換 ODBC とは異なり、OLE DB では、データの挿入、更新およびフェッチに対する暗黙的なバ インドのみ実行できます。中間のキャラクタ・セットを決定するための変換アルゴリズム は、ODBC の暗黙的なバインドの場合と同じです。 表 7-10 OLE DB の暗黙的なバインド インバインドと OLE_DB クライアント・ データベース内の ターゲット列のデータ型 アウトバインドの変換 バッファのデータ型 DBTYPE_WCHAR CHAR、 VARCHAR2、 CLOB コメント 予期しないデータ消失はあり データベース・キャラクタ・ ません。 セットが NLS_LANG キャラク タ・セットのサブセットの場合 : データベース・キャラクタ・ OCI での、データベース・キャ セットが NLS_LANG キャラク タ・セットのサブセットであ ラクタ・セットと NLS_LANG キャラクタ・セットの間の変換 る場合は、パフォーマンスが OLE DB での、NLS_LANG キャ 低下する可能性があります。 ラクタ・セットから UTF-16 へ の変換 データベース・キャラクタ・ セットが NLS_LANG キャラク タ・セットのサブセットでない 場合 : OCI での、データベース・キャ ラクタ・セットと UTF-16 の間 の変換 DBTYPE_CHAR CHAR、 VARCHAR2、 CLOB 予期しないデータ消失はあり データベース・キャラクタ・ ません。 セットが NLS_LANG キャラク タ・セットのサブセットの場合 : データベース・キャラクタ・ OCI での、データベース・キャ セットが NLS_LANG キャラク ラクタ・セットと NLS_LANG の タ・セットのサブセットでな い場合は、パフォーマンスが 間の変換 低下する可能性があります。 データベース・キャラクタ・ セットが NLS_LANG キャラク タ・セットのサブセットでない 場合 : OCI での、データベース・キャ ラクタ・セットと UTF-16 の間 の変換 OLE DB での、UTF-16 から NLS_LANG キャラクタ・セット への変換 Unicode を使用したプログラミング 7-41 Unicode を使用した ODBC と OLE DB のプログラミング ODBC の Unicode データ型 ODBC の Unicode アプリケーションでは、SQLWCHAR を使用して Unicode データを格納し ます。SQLWCHAR のデータ操作には、すべての標準的な Windows Unicode 関数を使用でき ます。たとえば、wcslen は SQLWCHAR データの文字数をカウントします。 SQLWCHAR sqlStmt[] = L"select ename from emp"; len = wcslen(sqlStmt); Microsoft の ODBC 3.5 仕様には、クライアントの SQL_C_WCHAR、SQL_C_WVARCHAR およ び SQL_WLONGVARCHAR に対して 3 つの Unicode データ型識別子が定義され、サーバーの SQL_WCHAR、SQL_WVARCHAR および SQL_WLONGVARCHAR に対して 3 つの Unicode データ 型識別子が定義されています。 バインド操作の場合は、SQLBindParameter を使用して、クライアントとサーバーの両方 にデータ型を指定します。次は Unicode バインドの例です。この例のクライアント・バッ ファ Name は、Unicode データ(SQL_C_WCHAR)が Unicode 列(SQL_WCHAR)に関連付け られている最初のバインド変数にバインドされていることを示しています。 SQLBindParameter(StatementHandle, 1, SQL_PARAM_INPUT, SQL_C_WCHAR, SQL_WCHAR, NameLen, 0, (SQLPOINTER)Name, 0, &Name); 表 7-11 に、SQL NCHAR データ型に対するサーバーの ODBC Unicode データ型のデータ型 マッピングを示します。 表 7-11 サーバーの ODBC Unicode データ型マッピング ODBC データ型 Oracle データ型 SQL_WCHAR NCHAR SQL_WVARCHAR NVARCHAR2 SQL_WLONGVARCHAR NCLOB SQL_WCHAR、SQL_WVARCHAR および SQL_WLONGVARCHAR は、ODBC 仕様に従って Unicode データとして処理されます。したがって、これらのデータ型はバイト数ではなく文 字数で測定されます。 7-42 Oracle Database グローバリゼーション・サポート・ガイド Unicode を使用した ODBC と OLE DB のプログラミング OLE DB の Unicode データ型 OLE DB では、Unicode の C クライアントに対して wchar_t、BSTR および OLESTR データ 型が用意されています。実際には、wchar_t が最も一般的なデータ型で、他のデータ型は 特定の目的に使用されます。次の例では、静的な SQL 文が割り当てられます。 wchar_t *sqlStmt = OLESTR("SELECT ename FROM emp"); OLESTR マクロは、"L" 修飾子と同様に機能して Unicode 文字列を示します。OLESTR を使 用して Unicode データ・バッファを動的に割り当てる必要がある場合は、IMalloc アロ ケート関数(例 : CoTaskMemAlloc)を使用します。ただし、OLESTR の使用は、可変長 データに対する通常の方法ではありません。一般的な文字列型には、かわりに wchar_t* を 使用してください。BSTR も機能は同様です。BSTR は、文字列の前のメモリー位置に長さの 接頭辞が付いている文字列です。一部の関数とメソッドでは、BSTR Unicode データ型のみ が受け入れられます。したがって、割当てを行う SysAllocString やメモリーを解放する SysFreeString などの特別な関数では、BSTR Unicode 文字列を操作する必要があります。 ODBC とは異なり、OLE DB ではサーバーのデータ型を明示的に指定することはできませ ん。クライアントのデータ型を設定すると、OLE DB ドライバは、必要に応じて自動的に データ変換を実行します。 表 7-12 に、OLE DB のデータ型マッピングを示します。 表 7-12 OLE DB のデータ型マッピング OLE DB データ型 Oracle データ型 DBTYPE_WCHAR NCHAR または NVARCHAR2 DBTYPE_BSTR が指定されていると、DBTYPE_WCHAR であるとみなされます。これは、両方 とも Unicode 文字列であるためです。 ADO アクセス ADO は、OLE DB ドライバと ODBC ドライバを使用してデータベースにアクセスするため の高水準 API です。ほとんどのデータベース・アプリケーション開発者が、Windows 上で ADO インタフェースを使用しています。これは、このインタフェースが、Internet Information Server(IIS)用の Active Server Pages(ASP)に対する主要なスクリプト言語 である Visual Basic から簡単にアクセスできるためです。OLE DB および ODBC ドライバに 対しては、ADO は単なる OLE DB コンシューマまたは ODBC アプリケーションです。 ADO は、OLE DB および ODBC ドライバが Unicode 認識コンポーネントであることを前提 としているため、常に Unicode データを操作しようとします。 Unicode を使用したプログラミング 7-43 Unicode を使用した XML プログラミング Unicode を使用した XML プログラミング グローバル市場向けのソフトウェア開発では、テキスト情報をあらゆる言語でやりとりでき るように、Unicode の XML サポートが必要です。Unicode では、ほぼすべての文字と言語 が一様にサポートされているため、XML による複数言語のサポートがはるかに容易になり ます。Oracle データベース内の XML で Unicode を使用可能にするには、データベースの キャラクタ・セットが UTF-8 である必要があります。アプリケーションで Unicode テキス ト処理を使用可能にすることが、あらゆる言語をサポートするための基礎となります。各 XML 文書は、Unicode 文字の既知のサブセットのみの使用が保証されないかぎり、Unicode テキストであり、多言語が使用されている場合もあります。そのため、XML に Unicode を 使用可能にすることをお薦めします。Unicode サポートは、Java および他の多数の最新プロ グラミング環境に用意されています。 この項の内容は、次のとおりです。 ■ Java を使用した Unicode での XML ファイルの作成 ■ Java を使用した Unicode での XML ファイルの読取り ■ Java を使用した Unicode での XML ストリームの解析 Java を使用した Unicode での XML ファイルの作成 XML ファイルを読み書きする際の一般的な誤りは、文字の入出力に Reader および Writer クラスを使用することです。XML ファイルに Reader および Writer を使用する と、ランタイム環境のデフォルトの文字コード体系に基づくキャラクタ・セット変換が必要 になるため、この方法は使用しないでください。 たとえば、FileWriter クラスを使用すると、文書がデフォルトの文字コード体系に変換さ れるため、問題が生じることがあります。文書にデフォルトの文字コード体系で使用できな い文字が含まれていると、出力ファイルの解析エラーやデータ消失が発生する可能性があり ます。 XML 文書には UTF-8 が一般的ですが、通常、UTF-8 は Java のデフォルトのファイル・エン コーディングではありません。そのため、デフォルトのファイル・エンコーディングを想定 する Java クラスを使用すると、問題が発生する可能性があります。 次の例に、これらの問題を回避する方法を示します。 import java.io.*; import oracle.xml.parser.v2.*; public class I18nSafeXMLFileWritingSample { public static void main(String[] args) throws Exception { // create a test document XMLDocument doc = new XMLDocument(); doc.setVersion( "1.0" ); 7-44 Oracle Database グローバリゼーション・サポート・ガイド Unicode を使用した XML プログラミング doc.appendChild(doc.createComment( "This is a test empty document." )); doc.appendChild(doc.createElement( "root" )); // create a file File file = new File( "myfile.xml" ); // create a binary output stream to write to the file just created FileOutputStream fos = new FileOutputStream( file ); // create a Writer that converts Java character stream to UTF-8 stream OutputStreamWriter osw = new OutputStreamWriter( fos, "UTF8" ); // buffering for efficiency Writer w = new BufferedWriter( osw ); // create a PrintWriter to adapt to the printing method PrintWriter out = new PrintWriter( w ); // print the document to the file through the connected objects doc.print( out ); } } Java を使用した Unicode での XML ファイルの読取り XML ファイルをテキスト入力として読み取らないでください。ファイル・システムに格納 されている XML 文書の読み取り時には、Parser を使用して文書の文字コード体系を自動的 に検出します。Reader クラスの使用や、入力ストリームでの文字コード体系の指定は避け てください。外部エンコーディング情報のないバイナリ入力ストリームの場合、Parser は XML 文書のバイト順マークとエンコーディング宣言に基づいて文字コード体系を自動的に 検出します。サポート対象のエンコーディングによる整形式の文書は、次のサンプル・コー ドを使用して正常に解析できます。 import java.io.*; import oracle.xml.parser.v2.*; public class I18nSafeXMLFileReadingSample { public static void main(String[] args) throws Exception { // create an instance of the xml file File file = new File( "myfile.xml" ); // create a binary input stream FileInputStream fis = new FileInputStream( file ); // buffering for efficiency Unicode を使用したプログラミング 7-45 Unicode を使用した XML プログラミング BufferedInputStream in = new BufferedInputStream( fis ); // get an instance of the parser DOMParser parser = new DOMParser(); // parse the xml file parser.parse( in ); } } Java を使用した Unicode での XML ストリームの解析 XML 文書のソースがファイル・システム以外の場合、通常、エンコーディング情報は文書 の読取り前に使用可能です。たとえば、入力文書が Java 文字ストリームまたは Reader の形 式で提供される場合、そのエンコーディングは明らかであり、検出する必要はありません。 Parser は、文字コード体系に関係なく Unicode で Reader の解析を開始できます。 次に、外部エンコーディング情報を使用した文書の解析例を示します。 import import import import java.io.*; java.net.*; org.xml.sax.*; oracle.xml.parser.v2.*; public class I18nSafeXMLStreamReadingSample { public static void main(String[] args) throws Exception { // create an instance of the xml file URL url = new URL( "http://myhost/mydocument.xml" ); // create a connection to the xml document URLConnection conn = url.openConnection(); // get an input stream InputStream is = conn.getInputStream(); // buffering for efficiency BufferedInputStream bis = new BufferedInputStream( is ); /* figure out the character encoding here */ /* a typical source of encoding information is the content-type header */ /* we assume it is found to be utf-8 in this example */ String charset = "utf-8"; // create an InputSource for UTF-8 stream InputSource in = new InputSource( bis ); 7-46 Oracle Database グローバリゼーション・サポート・ガイド Unicode を使用した XML プログラミング in.setEncoding( charset ); // get an instance of the parser DOMParser parser = new DOMParser(); // parse the xml stream parser.parse( in ); } } Unicode を使用したプログラミング 7-47 Unicode を使用した XML プログラミング 7-48 Oracle Database グローバリゼーション・サポート・ガイド 8 Oracle Globalization Development Kit この章の内容は、次のとおりです。 ■ Oracle Globalization Development Kit の概要 ■ グローバルなインターネット・アプリケーションの設計 ■ グローバルなインターネット・アプリケーションの開発 ■ Globalization Development Kit スタート・ガイド ■ J2EE 用 GDK アプリケーション・フレームワーク ■ GDK の Java API ■ GDK アプリケーション構成ファイル ■ Java 用 GDK 提供のパッケージおよびクラス ■ PL/SQL 用 GDK 提供のパッケージ ■ GDK エラー・メッセージ Oracle Globalization Development Kit 8-1 Oracle Globalization Development Kit の概要 Oracle Globalization Development Kit の概要 国際化されたアプリケーションの設計および開発は、最も経験豊富な開発者にとってさえ困 難な作業になる場合があります。これは通常、知識不足やグローバリゼーションの概念と API が複雑であるために起こります。Oracle データベースを使用してアプリケーションを記 述するアプリケーション開発者は、様々なキャラクタ・セット、地域、言語および言語ソー ト定義のプロパティなど、データベースのグローバリゼーション・サポートのアーキテク チャを理解する必要があります。また、中間層のプログラミング環境のグローバリゼーショ ン機能を理解し、データベースのロケール・モデルとどのように相互作用し、同期化するか を調べる必要もあります。さらに、国際化されたインターネット・アプリケーションを開発 するには、キャラクタ・セットおよびロケール要件の異なる様々なオペレーティング・シス テム上で実行中の複数のクライアントを同時にサポートする機能を持ったコードを設計し、 記述することが必要です。 Oracle Globalization Development Kit(GDK)を使用すると、開発プロセスが簡素化され、 グローバル環境のサポートに使用されるインターネット・アプリケーションの開発コストが 削減されます。 このリリースの GDK には、Java および PL/SQL 用の包括的なプログラミング API、サンプ ル・コード、グローバル・アプリケーションの作成中に発生する設計、開発および配置上の 様々な問題に対処するドキュメントが含まれています。 GDK は、主として Java 用 GDK および PL/SQL 用 GDK という 2 つの部分で構成されてい ます。Java 用 GDK は、Java アプリケーションにグローバリゼーション・サポートを提供し ます。PL/SQL 用 GDK は、PL/SQL プログラミング環境にグローバリゼーション・サポー トを提供します。Java 用 GDK と PL/SQL 用 GDK では、提供される機能が異なります。 8-2 Oracle Database グローバリゼーション・サポート・ガイド グローバルなインターネット・アプリケーションの設計 グローバルなインターネット・アプリケーションの設計 グローバルな Web サイトやグローバルなインターネット・アプリケーションの配置には、 グローバリゼーション要件とビジネス要件に応じて 2 つのアーキテクチャ・モデルがありま す。どちらのモデルを配置するかは、インターネット・アプリケーションの開発方法と、中 間層におけるアプリケーション・サーバーの構成方法に影響します。この 2 つのモデルは次 のとおりです。 ■ 単一言語インターネット・アプリケーションの複数インスタンス 単一バイナリでロケールを 1 つのみサポートするインターネット・アプリケーション は、単一言語アプリケーションとして分類されます。ロケールは、各国語とその言語が 使用されている地域を指します。たとえば、米国と英国の主要言語は英語です。ただ し、この 2 つの地域の通貨と日付書式の表記規則は異なります。そのため、米国と英国 は 2 つの異なるロケールとみなされます。 このレベルのグローバリゼーション・サポートは、アプリケーション・インスタンスご とに 1 つのロケールをサポートする場合に適しています。様々なロケールのアプリケー ションにアクセスするには、異なるエントリ・ポイントが必要になります。このモデル が管理可能なのは、サポート対象のロケールが少ない場合のみです。 ■ 多言語アプリケーションの単一インスタンス 単一バイナリで同時に複数のロケールをサポートするインターネット・アプリケーショ ンは、多言語アプリケーションとして分類されます。このレベルのグローバリゼーショ ン・サポートは、1 つのインターネット・アプリケーションで同時に複数のロケールを サポートする必要がある場合に適しています。異なるロケール環境のユーザーは、同じ エントリ・ポイントを使用してアプリケーションにアクセスします。 単一言語モデルを使用したアプリケーション開発は、多言語モデルを使用したアプリ ケーション開発とはまったく異なります。Globalization Development Kit は、どちらの アーキテクチャ・モデルを使用したグローバル・アプリケーション開発も支援できるよ うに複数のライブラリで構成されています。 これ以降の内容は、次のとおりです。 ■ 単一言語インターネット・アプリケーションの配置 ■ 多言語インターネット・アプリケーションの配置 Oracle Globalization Development Kit 8-3 グローバルなインターネット・アプリケーションの設計 単一言語インターネット・アプリケーションの配置 図 8-1 に、単一言語インターネット・アプリケーションの複数インスタンスを使用した、グ ローバル・インターネット・アプリケーションの配置を示します。 図 8-1 単一言語インターネット・アプリケーションのアーキテクチャ 各アプリケーション・サーバーは、処理を受け持つロケール用に構成されます。この配置モ デルは、インターネット・アプリケーションの 1 つのインスタンスが中間層のアプリケー ションと同じロケールで実行されることを想定しています。 8-4 Oracle Database グローバリゼーション・サポート・ガイド グローバルなインターネット・アプリケーションの設計 インターネット・アプリケーションは、ロケールに使用されるネイティブ・エンコーディン グを使用してバックエンド・データベースにアクセスします。単一言語インターネット・ア プリケーションを配置するメリットは、次のとおりです。 ■ ■ 個々のロケールのサポートが異なるサーバーに分離されるため、複数のロケールを異な る場所で独立してサポートでき、それに応じてワークロードを分散できます。たとえ ば、最初は西欧ロケールをサポートし、その後日本語などのアジア・ロケールをサポー トできます。 同時に複数のロケールをサポートする作業に伴う複雑さが回避されます。多言語イン ターネット・アプリケーションに比べると、単一言語インターネット・アプリケーショ ンの場合はコードの記述量が大幅に少なくなります。 単一言語インターネット・アプリケーションを配置するデメリットは、次のとおりです。 ■ ■ ■ ■ ■ 異なるロケールについて複数のサーバーをメンテナンスおよび管理するために、余分な 作業が必要です。また、様々なアプリケーション・サーバーに異なる構成が必要です。 アプリケーション・サーバーの最小必要数は、サイトの通信量がアプリケーション・ サーバーの能力に到達するかどうかに関係なく、アプリケーションでサポートされるロ ケールの数に応じて異なります。 アプリケーション・サーバーのロード・バランシングは、同じロケールのアプリケー ション・サーバーのグループに限定されます。 アプリケーション・サーバーの複数構成には、より多くの QA リソース(ユーザーおよ びマシン)が必要です。様々なロケールで実行されるインターネット・アプリケーショ ンは、対応するアプリケーション・サーバー構成で保証される必要があります。 多言語によるコンテンツをサポートするようには設計されていません。たとえば、この モデルでは、日本語とアラビア語のデータを含む Web ページをサポートするのは容易 ではありません。 サポート対象のロケール数が増えるほど、デメリットがメリットを上回ることになります。 単一言語配置モデルに伴う制限とメンテナンスのオーバーヘッドを考慮すると、この配置 アーキテクチャは 1 つまたは 2 つのロケールのみをサポートするアプリケーションに適して います。 Oracle Globalization Development Kit 8-5 グローバルなインターネット・アプリケーションの設計 多言語インターネット・アプリケーションの配置 多言語インターネット・アプリケーションは、すべてのロケールを処理する単一アプリケー ション・サーバー構成を持つアプリケーション・サーバーに配置されます。図 8-2 に、多言 語インターネット・アプリケーションのアーキテクチャを示します。 図 8-2 多言語インターネット・アプリケーションのアーキテクチャ 8-6 Oracle Database グローバリゼーション・サポート・ガイド グローバルなインターネット・アプリケーションの設計 単一のアプリケーション・インスタンスで複数のロケールをサポートするには、アプリケー ションで次の操作が必要になる場合があります。 ■ ■ ■ ユーザーのロケールを動的に検出し、そのロケールの言語および文化的な慣習に従って HTML ページを構成することで調整します。 どの言語のデータでもサポートできるように、文字データを Unicode で処理します。文 字データは、ユーザーが入力してもバックエンド・データベースから取り出してもかま いません。 HTML ページに使用する HTML ページ・エンコーディング(キャラクタ・セット)を 動的に判別し、Unicode とページ・エンコーディングの間でコンテンツを変換します。 多言語インターネット・アプリケーションを配置する主なメリットは、次のとおりです。 ■ ■ ■ ■ ■ すべてのアプリケーション・サーバーに 1 つのアプリケーション・サーバー構成を使用 することで、配置構成が単純化され、メンテナンス・コストが削減されます。 パフォーマンス・チューニングと処理能力計画は、Web サイトでサポートされるロケー ルの数に依存しません。 ロケールの追加導入が比較的容易です。新規ロケール用にマシンを追加する必要はあり ません。 1 つのテスト環境で様々なロケールにまたがってアプリケーションをテストできます。 このモデルでは、同じアプリケーション・インスタンス内で多言語によるコンテンツを サポートできます。たとえば、このモデルでは、日本語、中国語、英語およびアラビア 語のデータを含む Web ページを容易にサポートできます。 多言語インターネット・アプリケーションを配置するデメリットは、アプリケーション開発 時に動的なロケール検出と Unicode を処理するために余分なコーディングが必要になること です。1 つまたは 2 つの言語のみをサポートすればよい場合、この作業は多額のコストを伴 います。 Web サイトで複数のロケールがサポートされている場合には、単一言語アプリケーションを 配置するよりも多言語インターネット・アプリケーションを配置するほうが適しています。 Oracle Globalization Development Kit 8-7 グローバルなインターネット・アプリケーションの開発 グローバルなインターネット・アプリケーションの開発 異なるロケールをサポートするインターネット・アプリケーションを構築するには、優れた 開発力が必要です。 多言語インターネット・アプリケーションの場合は、アプリケーション自体がユーザーのロ ケールを認識し、ロケールに適したコンテンツを表示できる必要があります。クライアント は、そのロケールに関係なくアプリケーション・サーバーと通信できる必要があります。こ れにより、アプリケーション・サーバーはデータベース・サーバーと通信し、様々なロケー ル設定およびキャラクタ・セット設定の作業環境を維持しながらデータを交換します。多言 語インターネット・アプリケーションを開発する際に重要な考慮事項の 1 つは、ユーザーの 優先ロケールに従って適切なコンテンツを動的に検出、キャッシュして提供できるようにす ることです。 単一言語インターネット・アプリケーションの場合、ユーザーのロケールは常に固定であ り、通常はランタイム環境のデフォルト・ロケールに従います。そのため、ロケール構成は はるかに単純です。 次の項では、グローバルなインターネット・アプリケーションの開発時に開発者が直面する 最も一般的な問題について説明します。 ■ ロケールの判別 ■ ロケール対応 ■ コンテンツのローカライズ ロケールの判別 ロケール対応またはロケール依存にするには、インターネット・アプリケーションでユー ザーの優先ロケールを判別できる必要があります。 単一言語アプリケーションでは、常にユーザーに同じロケールが提供され、そのロケールは 対応するプログラミング環境のデフォルトのランタイム・ロケールと等価である必要があり ます。 多言語アプリケーションでは、ユーザー・ロケールを次の 3 つの方法で動的に判別できま す。どの方法にもそれぞれメリットとデメリットがありますが、アプリケーションで併用し て相互に補完できます。ユーザー・ロケールは、次の方法で判別できます。 ■ Oracle Internet Directory などの LDAP ディレクトリ・サーバーからのユーザー・プロ ファイル情報、またはデータベースに格納されている他のユーザー・プロファイル表に 基づく方法 ユーザー・プロファイルのスキーマには、ユーザーのロケールを示す優先ロケール属性 を含める必要があります。ユーザーが前にログオンしたことがない場合、このロケー ル・ユーザーの判別方法は動作しません。 8-8 Oracle Database グローバリゼーション・サポート・ガイド グローバルなインターネット・アプリケーションの開発 ■ ブラウザのデフォルト・ロケールに基づく方法 ブラウザからデフォルトの ISO ロケール設定を取得します。ブラウザのデフォルトの ISO ロケールは、すべての HTTP リクエストで Accept-Language HTTP ヘッダーを介し て送信されます。Accept-Language ヘッダーが NULL の場合は、デフォルトで必要な ロケールを英語に設定する必要があります。このアプリケーションの短所は、 Accept-Language ヘッダーがユーザーのロケール情報に関して信頼できるソースでない 場合があることです。 ■ ユーザーの選択に基づく方法 ユーザーがリスト・ボックスまたはメニューからロケールを選択し、アプリケーション のロケールを選択したロケールに切り替えられるようにします。 Globalization Development Kit は、これらのロケール判別方法を宣言的に使用できるアプリ ケーション・フレームワークを提供します。 関連項目 : ド」 8-10 ページ「Globalization Development Kit スタート・ガイ ロケール対応 ロケール対応またはロケール依存にするには、インターネット・アプリケーションでユー ザーのロケールを判別する必要があります。ユーザー・ロケールの判別後に、アプリケー ションで次の操作を実行する必要があります。 ■ ロケールの言語による HTML コンテンツの構成 ■ ロケールが示す文化的な慣習の使用 日付、時刻および通貨の書式など、ロケール依存の機能は、Java や PL/SQL などの各種プ ログラミング環境に組み込まれています。アプリケーションでは、これらの機能を使用し、 ユーザーのロケールの文化的な慣習に従って HTML ページをフォーマットできます。ロ ケールの表現は、プログラミング環境ごとに異なります。たとえば、フランス語(カナダ) ロケールは、様々な環境で次のように表現されます。 ■ ■ ■ ISO 規格では、fr-CA で表されます。fr は ISO 639 規格で定義されている言語コード で、CA は ISO 3166 規格で定義されている国コードです。 Java では、Java ロケール・オブジェクトで表現されます。言語はフランス語を表す ISO 言語コードの fr として、国はカナダを表す ISO 国コードの CA で示されます。Java ロ ケール名は、fr_CA となります。 PL/SQL と SQL では、主として NLS_LANGUAGE および NLS_TERRITORY セッション・ パラメータで表現されます。NLS_LANGUAGE パラメータの値は CANADIAN FRENCH で、NLS_TERRITORY パラメータの値は CANADA です。 複数のプログラミング環境向けのアプリケーションを記述する場合は、環境間でロケールを 同期化する必要があります。たとえば、PL/SQL プロシージャをコールする Java アプリ ケーションでは、Java ロケールを対応する NLS_LANGUAGE 値と NLS_TERRITORY 値にマッ Oracle Globalization Development Kit 8-9 Globalization Development Kit スタート・ガイド プし、各パラメータ値をユーザーのロケールにあわせて変更してから、PL/SQL プロシー ジャをコールする必要があります。 Java 用の Globalization Development Kit には、Oracle データベースでのロケール依存動作 の一貫性を保証するために、Java クラスのセットが用意されています。 コンテンツのローカライズ アプリケーションで多言語環境をサポートするには、コンテンツを使用言語とユーザーのロ ケールの表記規則で表示できる必要があります。ハードコード化されたユーザー・インタ フェースのテキストは、アプリケーションでサポートされる様々な言語に翻訳できるよう に、イメージ・ファイルとともにアプリケーションから外部化する必要があります。その 後、翻訳ファイルを個別のディレクトリにステージングし、アプリケーションでユーザー・ ロケール設定に従って関連コンテンツを検索できるようにします。また、代替メカニズムを サポートするために、特殊なアプリケーション処理が必要になることもあります。これによ り、ユーザーの優先ロケールが使用できない場合に、2 番目に適切なコンテンツが表示され ます。たとえば、カナダ系フランス語のコンテンツが使用できない場合は、かわりにアプリ ケーションをフランス語ファイルに切り替えることが適切である可能性があります。 Globalization Development Kit スタート・ガイド Java 用 Globalization Development Kit(GDK)は、オラクル社が設計した最適のグローバ リゼーション機能を使用して国際化されたインターネット・アプリケーションを開発できる ように、J2EE アプリケーション・フレームワークと Java API を提供します。これにより、 Oracle 開発者が国際化された Java アプリケーションを開発するために必要とするコードの 複雑さがやや解消され、簡素化されます。 Java 用 GDK は、J2EE の従来のグローバリゼーション機能を補完する製品です。J2EE プ ラットフォームにはすでに、国際化されたアプリケーション構築用の強力な基盤があります が、そのグローバリゼーション機能と動作は Oracle の機能とはまったく異なる場合があり ます。Java 用 GDK は、中間層の Java アプリケーションとデータベース・サーバー間でロ ケール依存動作を同期化します。 PL/SQL 用 GDK には、PL/SQL で記述されたアプリケーション用にグローバリゼーション 機能を追加提供する PL/SQL パッケージのスイートが含まれています。 図 8-3 に、GDK の主要コンポーネントと、コンポーネント相互の関係を示します。ユー ザー・アプリケーションは、中間層の Oracle Application Server の J2EE コンテナで実行さ れます。GDK は、J2EE アプリケーションでグローバリゼーション・サポート用のコーディ ングを簡素化するためのアプリケーション・フレームワークを提供します。フレームワーク とアプリケーションは、どちらも GDK の Java API をコールしてロケール依存タスクを実行 します。PL/SQL 用 GDK には、PL/SQL 環境に固有のグローバリゼーションの問題を解決 する上で役立つ PL/SQL パッケージが用意されています。 8-10 Oracle Database グローバリゼーション・サポート・ガイド Globalization Development Kit スタート・ガイド 図 8-3 GDK のコンポーネント Java 用 GDK が提供する機能は、次の 2 つのカテゴリにわかれています。 ■ ■ J2EE 用 GDK アプリケーション・フレームワークは、J2EE ベースのインターネット・ア プリケーションを構築するためのグローバリゼーション・フレームワークを提供しま す。このフレームワークにより、ユーザー・ロケールの判別、ロケールの永続性の維持 およびロケール情報の処理など、グローバリゼーション・プログラミングの複雑さがカ プセル化されます。これを構成する一連の Java クラスを介して、アプリケーションは フレームワークへのアクセスを取得できます。これらの関連 Java クラスを使用すると、 グローバリゼーション動作を宣言的に拡張できるようにアプリケーションでフレーム ワークに対してコード化できます。 GDK の Java API は、Java アプリケーションでの開発サポートを提供し、Oracle データ ベース・サーバーで提供される一貫したグローバリゼーション操作を提供します。API はアクセス可能であり、GDK フレームワークから独立しているため、スタンドアロン Oracle Globalization Development Kit 8-11 J2EE 用 GDK アプリケーション・フレームワーク の Java アプリケーションと GDK フレームワークに基づかない J2EE アプリケーション は、Java API の機能に個別にアクセスできます。Java API が提供する機能には、Oracle Database と同じ方法によるキャラクタ・セットのデータと数値の書式設定、ソートおよ び処理が含まれます。 注意 : GDK の Java API は、JDK バージョン 1.3 以上で保証されていま す。ただし、キャラクタ・セット変換クラスは、JDK 1.4 以上で使用可能 な java.nio.charset パッケージに依存します。 Java 用 GDK は、2 つのファイル orai18n.jar および orai18n-lcsd.jar に含まれてい ます。各ファイルは Oracle データベースに付属しています。GDK を使用するアプリケー ションがデータベースと同じマシンで管理されていない場合、そのアプリケーションを実行 するには、GDK ファイルをアプリケーション・サーバーにコピーして CLASSPATH に組み 込む必要があります。Java アプリケーション内では、Oracle Database をアプリケーショ ン・サーバーにインストールしなくても GDK を実行できます。GDK は、どのプラット フォームでも動作する純粋な Java ライブラリです。Oracle クライアント・パラメータ NLS_LANG および ORACLE_HOME は必要ありません。 J2EE 用 GDK アプリケーション・フレームワーク Java 用 GDK は、中間層の J2EE アプリケーション用のグローバリゼーション・フレーム ワークを提供します。このフレームワークにより、ユーザー・ロケールの判別、ロケールの 永続性の維持およびロケール情報の処理など、グローバリゼーション・プログラミングの複 雑さがカプセル化されます。また、インターネット・アプリケーションをグローバル対応に するために必要な労力が最小限に抑えられます。図 8-4 に、GDK アプリケーション・フ レームワークを示します。 8-12 Oracle Database グローバリゼーション・サポート・ガイド J2EE 用 GDK アプリケーション・フレームワーク 図 8-4 J2EE 用 GDK アプリケーション・フレームワーク フレームワークを構成するメインの Java クラスは次のとおりです。 ■ ■ ■ ApplicationContext は、アプリケーションのグローバリゼーション・コンテキスト を提供します。コンテキスト情報には、サポート対象ロケールのリストと、ユーザーの 優先ロケールを判別するための規則が含まれます。このコンテキスト情報は、アプリ ケーション用の GDK アプリケーション構成ファイルから取得されます。 LocaleSource クラスのセットをフレームワークにプラグインできます。各 LocaleSource クラスでは、対応するソースからロケールを取得するための LocaleSource インタフェースが実装されます。GDK には、複数の LocaleSource クラスがバンドルされています。たとえば、DBLocaleSource クラスは、データベー ス・スキーマから現行のユーザーのロケール情報を取得します。また、同じ LocaleSource インタフェースを実装してフレームワークにプラグインすると、カス タマイズされた LocaleSource クラスを記述できます。 ServletRequestWrapper および ServletResponseWrapper は、HTTP リクエスト と HTTP レスポンスを変換する GDK サーブレット・フィルタのメイン・クラスです。 ServletRequestWrapper は、ApplicationContext および LocaleSource オブ ジェクトから収集した情報に基づいて、HTTP リクエストごとに Localizer オブジェ クトをインスタンス化し、フォーム・パラメータが正しく処理されることを確認しま す。ServletResponseWrapper は、HTTP レスポンスの構成方法を制御します。 Oracle Globalization Development Kit 8-13 J2EE 用 GDK アプリケーション・フレームワーク ■ ■ Localizer は、現行のユーザー・ロケールとアプリケーション・コンテキストに依存 する重要な機能を公開するオールインワン・オブジェクトです。アプリケーションを コールし、現行のユーザー・ロケールおよびアプリケーション・コンテキストにあわせ て適切に動作させるために、集中化されたメソッド・セットを提供します。 GDK の Java API は、常にアプリケーションで使用してグローバリゼーション動作を詳 細に制御できます。 GDK アプリケーション・フレームワークにより、アプリケーションで様々なロケールをサ ポートするために必要なコーディングが簡素化されます。アプリケーション・フレームワー クに従って J2EE アプリケーションを記述すると、アプリケーション・コードはアプリケー ションでサポートされるロケールから独立したものになります。また、アプリケーションで のグローバリゼーション・サポートを制御するには、それを GDK アプリケーション構成 ファイル内で定義します。サポートされているアプリケーション・ロケールのリストからロ ケールを追加または削除する場合、コード変更は必要ありません。 次のリストに、GDK アプリケーション構成ファイル内でグローバリゼーション・サポート を定義できる範囲について参考情報を示します。 ■ サポートされているロケールのリストからロケールを追加または削除できます。 ■ ユーザー・ロケールの判別方法を変更できます。 ■ アプリケーションの HTML ページ・エンコーディングを変更できます。 ■ 翻訳済リソースの検索方法を指定できます。 ■ 新しい LocaleSource オブジェクトをフレームワークにプラグインし、それを使用し てユーザー・ロケールを検出できます。 この項の内容は、次のとおりです。 ■ J2EE アプリケーションで GDK フレームワークを使用可能にする方法 ■ GDK フレームワークへのロケール・ソースの統合 ■ GDK フレームワークからのユーザー・ロケールの取得 ■ GDK Localizer を使用したロケール対応機能の実装 ■ GDK でサポートされているアプリケーション・ロケールの定義 ■ GDK フレームワークでの ASCII 以外の入出力の処理 ■ GDK でのローカライズされたコンテンツの管理 8-14 Oracle Database グローバリゼーション・サポート・ガイド J2EE 用 GDK アプリケーション・フレームワーク J2EE アプリケーションで GDK フレームワークを使用可能にする方法 J2EE に対する GDK アプリケーション・フレームワークの動作は、GDK アプリケーション 構成ファイル gdkapp.xml により制御されます。アプリケーション構成ファイルを使用す ると、開発者は国際化されたアプリケーションの動作を中央の 1 箇所で指定できます。GDK を使用する J2EE アプリケーションごとに、アプリケーション構成ファイルが 1 つずつ必要 です。gdkapp.xml ファイルは、アプリケーションの J2EE 環境の ./WEB-INF ディレクト リに置く必要があります。このファイルでは、GDK フレームワークの動作およびプロパ ティと、それを使用するアプリケーションを指定します。このファイルには、ロケール・ マッピング表、コンテンツ・ファイルのキャラクタ・セットおよびアプリケーションの構成 用グローバリゼーション・パラメータが含まれます。アプリケーション管理者は、プログラ ムを変更したり再コンパイルしなくても、アプリケーション構成ファイルを変更すればアプ リケーションのグローバリゼーション動作を変更できます。 関連項目 : 8-36 ページ「GDK アプリケーション構成ファイル」 J2EE アプリケーションで、対応する GDK アプリケーション構成ファイルにより定義された GDK アプリケーション・フレームワークを使用するには、アプリケーションの web.xml ファイル内で GDK サーブレット・フィルタと GDK コンテキスト・リスナーを定義する必 要があります。web.xml ファイルを変更し、ファイルの先頭に次の行を挿入してください。 <web-app> <!-- Add GDK filter that is called after the authentication --> <filter> <filter-name>gdkfilter</filter-name> <filter-class>oracle.i18n.servlet.filter.ServletFilter</filter-class> </filter> <filter-mapping> <filter-name>gdkfilter</filter-name> <url-pattern>*.jsp</url-pattern> </filter-mapping> <!-- Include the GDK context listener --> <listener> <listener-class>oracle.i18n.servlet.listener.ContextListener</listener-class> </listener> </web-app> gdkapp.xml ファイルと web.xml ファイルの例は、$ORACLE_HOME/nls/gdk/demo ディ レクトリにあります。 GDK アプリケーション・フレームワークは、バージョン 2.3 以上のサーブレット・コンテナ をサポートしています。サーブレット・フィルタ機能は、ユーザー・ロケールの判別やコン テンツ・ファイルのキャラクタ・セットの指定など、透過的なグローバリゼーション操作に 使用されます。ApplicationContextListener は、GDK アプリケーション構成ファイ Oracle Globalization Development Kit 8-15 J2EE 用 GDK アプリケーション・フレームワーク ルに記述されている GDK アプリケーション・パラメータをインスタンス化します。 ServletFilter は、リクエスト・オブジェクトとレスポンス・オブジェクトを、それぞれ GDK リクエスト(ServletRequestWrapper)および GDK レスポンス (ServletResponseWrapper)オブジェクトでオーバーライドします。 アプリケーションで使用される他のアプリケーション・フィルタも同じメソッドをオーバー ライドする場合は、GDK フレームワーク内のフィルタが不正な結果を戻すことがあります。 たとえば、getLocale が en_US を戻しても、その結果が他のフィルタによりオーバーライ ドされると、GDK ロケール検出メカニズムの結果が影響を受けます。GDK フレームワーク のフィルタでオーバーライドされるすべてのメソッドについては、 『Oracle Globalization Development Kit Java API Reference』を参照してください。GDK フレームワークとともに 他のフィルタを使用する場合は、競合の可能性に注意してください。 GDK フレームワークへのロケール・ソースの統合 ユーザーの優先ロケールの判別は、アプリケーションをグローバル対応にする作業の最初の ステップです。J2EE アプリケーション・フレームワークのロケール検出機能はプリミティブ なものです。ロケール・ソースから最も適切なユーザー・ロケールを透過的に取り出すメ ソッドが欠落しています。提供されるのは HTTP 言語の作業環境によるロケール検出機能の みであり、マルチレベルのロケール代替メカニズムをサポートできません。GDK アプリ ケーション・フレームワークは、J2EE を補足するために事前定義済のロケール・ソースのサ ポートを提供します。Web アプリケーションでは、複数のロケール・ソースが使用可能で す。表 8-1 に、GDK が提供するロケール・ソースを示します。 表 8-1 GDK 提供のロケール・リソース ロケール 説明 HTTP 言語作業環境 HTTP プロトコルに Accept-Language の値として含まれるロケール。この値は Web ブラウザ・レベルで設定されます。ブラウザのロケールがアプリケーションで サポートされない場合は、ロケール代替操作が必要です。 ユーザー入力ロケール ユーザーがメニューまたは HTTP プロトコルのパラメータで指定するロケール。 データベースからのユーザー・ ユーザー・プロファイルの一部としてデータベースに格納されているロケール設定 プロファイルのロケール設定 項目。 項目 アプリケーションのデフォル ト・ロケール GDK アプリケーション構成ファイルで定義されているロケール。このロケールは、 アプリケーションのデフォルト・ロケールとして定義されます。通常は、他のロ ケール・ソースが使用できない場合に代替ロケールとして使用されます。 関連項目 : GDK のマルチレベル・ロケール代替メカニズムについては、 8-36 ページの「GDK アプリケーション構成ファイル」を参照してくださ い。 8-16 Oracle Database グローバリゼーション・サポート・ガイド J2EE 用 GDK アプリケーション・フレームワーク GDK アプリケーション・フレームワークは、ユーザー入力ロケール、HTTP 言語作業環境、 データベース内のユーザー・プロファイルのロケール設定項目およびアプリケーションのデ フォルト・ロケールなど、事前定義済のロケール・ソースに対してシームレスなサポートを 提供します。GDK アプリケーション構成ファイルの <locale-determine-rule> タグの 下に次のように定義することで、ロケール・ソースをフレームワークに取り込むことができ ます。 <locale-determine-rule> <locale-source>oracle.i18n.servlet.localesource.UserInput</locale-source> <locale-source>oracle.i18n.servlet.localesource.HTTPAcceptLanguage</locale-source> </locale-determine-rule> LDAP サーバーからのロケール設定項目など、カスタムのロケール・ソースは、簡単に実装 して GDK フレームワークに統合できます。LocaleSource インタフェースを実装し、事前 定義済のロケール・ソースを指定したのと同じ方法で、対応する実装クラスを <locale-determine-rule> タグの下に指定する必要があります。 LocaleSource 実装は、対応するソースからフレームワークにロケール情報を取り出すの みでなく、フレームワークから指示があった場合はロケール情報を対応するソースに対して 更新します。ロケール・ソースは読取り専用でも読取り / 書込みでもよく、キャッシュ可能 でもキャッシュ不可能でもかまいません。GDK フレームワークは読取り / 書込みモードの ロケール・ソースに対する更新のみを開始し、キャッシュ可能なロケール・ソースからのロ ケール情報をキャッシュします。カスタム・ロケール・ソースの例は、 $ORACLE_HOME/nls/gdk/demo ディレクトリにあります。 関連項目 : LocaleSource の実装の詳細は、 『Oracle Globalization Development Kit Java API Reference』を参照してください。 GDK フレームワークからのユーザー・ロケールの取得 GDK には、ユーザーの現行のロケールを判別するための自動ロケール検出機能があります。 たとえば、次のコードでは、現行のユーザー・ロケールが Java で取り出されます。Locale オブジェクトは明示的に使用されます。 Locale loc = request.getLocale(); getLocale() メソッドは、現行のロケールを表す Locale を戻します。これは、JSP また は Java Servlet コードで HttpServletRequest.getLocale() メソッドを起動する操作に 似ています。ただし、GDK フレームワークでは複数のロケール・ソースが考慮されるため、 ユーザー・ロケールの判別ロジックは異なります。 または、GDK フレームワークにより判別された Locale オブジェクトをカプセル化する Localizer オブジェクトを取得することもできます。Localizer オブジェクトを使用する メリットについては、8-19 ページの「GDK Localizer を使用したロケール対応機能の実装」 を参照してください。 Localizer localizer = ServletHelper.getLocalizerInstance(request); Locale loc = localizer.getLocale(); Oracle Globalization Development Kit 8-17 J2EE 用 GDK アプリケーション・フレームワーク GDK フレームワークのロケール検出ロジックは、GDK アプリケーション構成ファイルに定 義されているロケール・ソースに依存します。ロケール・ソース名は、アプリケーション構 成ファイルに登録されます。次の例に、アプリケーション構成ファイルの locale-determination-rule セクションを示します。このセクションは、ユーザーの優先ロ ケールを LDAP サーバーまたは HTTP Accept-Language ヘッダーから判別できることを 示しています。LDAPUserSchema ロケール・ソース・クラスは、アプリケーションが提供 する必要があります。すべてのロケール・ソース・クラスは、LocaleSource 抽象クラス から拡張する必要があることに注意してください。 <locale-determine-rule> <locale-source>LDAPUserSchema</locale-source> <locale-source>oracle.i18n.localesource.HTTPAcceptLanguage</locale-source> </locale-determine-rule> たとえば、ユーザーがアプリケーションで認証を受け、ユーザーのロケール設定項目が LDAP サーバーに格納されている場合、LDAPUserSchema クラスは LDAP サーバーに接続 してユーザー・ロケール設定項目を取り出します。匿名ユーザーの場合、 HttpAcceptLanguage クラスは Web ブラウザの言語作業環境を戻します。 キャッシュは、HTTP セッションの存続期間だけ維持されます。HTTP 言語作業環境からロ ケール・ソースが取得されると、ロケール情報は HTTP Accept-Language ヘッダーでア プリケーションに渡され、キャッシュされません。これにより、ロケール設定項目をリクエ スト間で柔軟に変更できます。HTTP セッション中はキャッシュが使用可能です。 GDK フレームワークで公開されるメソッドを使用すると、アプリケーションでは、LDAP サーバーやデータベース内のユーザー・プロファイル表などのロケール・ソースに永続的に 格納されているロケール設定項目情報を上書きできます。また、このメソッドは、現行の HTTP セッション用のキャッシュに格納されている現行のロケール情報をリセットします。 次の例に、store コマンドを使用して優先ロケールを上書きする方法を示します。 <input type="hidden" name="<%=appctx.getParameterName(LocaleSource.Parameter.COMMAND)%>" value="store"> キャッシュに格納されている現行のロケール情報を破棄するには、入力パラメータとして clean コマンドを指定できます。次の表に、GDK でサポートされているコマンドを示しま す。 コマンド 機能 store 使用可能なロケール・ソース内のユーザー・ロケール設定項目を、指定の ロケール情報で更新します。このコマンドは、読取り専用のロケール・ ソースでは無視されます。 clean キャッシュ内の現行のロケール情報を破棄します。 アプリケーションで使用される他のパラメータ名との競合を回避するために、GDK パラメー タ名をアプリケーション構成ファイル内でカスタマイズできることに注意してください。 8-18 Oracle Database グローバリゼーション・サポート・ガイド J2EE 用 GDK アプリケーション・フレームワーク GDK Localizer を使用したロケール対応機能の実装 GDK アプリケーション・フレームワークから取得される Localizer オブジェクトは、 オールインワンのグローバリゼーション・オブジェクトであり、アプリケーションでロケー ル対応機能を構築するときに一般に使用される機能へのアクセスを提供します。また、サ ポートされているロケールのリストなど、アプリケーション・コンテキストに関する情報を 取得するための機能も提供します。Localizer オブジェクトにより、アプリケーションで 一貫したロケール対応動作を構築するために必要なコードが簡素化され、集中化されます。 oracle.i18n.servlet パッケージには、Localizer クラスが含まれています。Localizer インスタンスは次のようにして取得できます。 Localizer lc = ServletHelper.getLocalizerInstance(request); Localizer オブジェクトは、GDK フレームワークにより判別される最も一般的なロケール 依存情報をカプセル化し、ロケール依存メソッドとして公開します。このオブジェクトに は、ユーザー・ロケールに関する次の機能があります。 ■ 長い書式と短い書式による日付の書式指定 ■ 数値と通貨の書式指定 ■ 文字列の照合キー値の取得 ■ 言語名、国名および通貨名などのロケール・データの取得 ■ ユーザー・インタフェースの構成に使用するロケール・データの取得 ■ リソース・バンドルからの翻訳済メッセージの取得 ■ 書込み方向などの書式指定情報の取得 ■ URL のエンコードとデコード ■ タイム・ゾーンおよび言語ソートの一般リストの取得 たとえば、アプリケーションで日付を表示する場合は、Localizer.formatDate() また は Localizer.formateDateTime() メソッドをコールします。現行のロケールの書込み 方法を判別する場合は、Localizer.getWritingDirection() および Localizer.getAlignment() をコールして、それぞれ <DIR> タグと <ALIGN> タグに使 用される値を判別できます。 Localizer オブジェクトは、アプリケーションでサポートされているロケールおよび対応 する言語と国のリストを列挙するメソッドも公開します。 Localizer オブジェクトは、実際には、GDK の Java API 内のクラスを使用可能にしてタ スクを実行します。これらのクラスには、OraDateFormat、OraNumberFormat、 OraCollator、OraLocaleInfo、oracle.i18n.util.LocaleMapper、 oracle.i18n.net.URLEncoder および oracle.i18n.net.URLDecoder などがありま す。 Oracle Globalization Development Kit 8-19 J2EE 用 GDK アプリケーション・フレームワーク Localizer オブジェクトにより、ロケール対応機能を実現するために記述する必要のある コードが簡素化されます。また、GDK の Java API から作成された対応するオブジェクトの キャッシュが維持されるため、コール側アプリケーションでは同じオブジェクトへの後続の コールのためにこれらのオブジェクトを維持する必要がありません。Localizer オブジェ クトが提供できる以上の機能が必要な場合は、いつでも GDK の Java API で対応するメソッ ドを直接コールできます。 関連項目 : Localizer オブジェクトの詳細は、 『Oracle Globalization Development Kit Java API Reference』を参照してください。 GDK でサポートされているアプリケーション・ロケールの定義 アプリケーションでサポートする必要のあるロケールの数と名前は、アプリケーションのビ ジネス要件に基づきます。アプリケーションでサポートされているロケールの名前は、アプ リケーション構成ファイルに登録されています。次の例に、アプリケーション構成ファイル の application-locales セクションを示します。このセクションは、アプリケーションでドイ ツ語(de) 、日本語(ja)および米英語(en-US)がサポートされ、デフォルトの代替アプ リケーション・ロケールとして英語が定義されていることを示しています。 <application-locales> <locale>de</locale> <locale>ja</locale> <locale default="yes">en-US</locale> </application-locales> GDK フレームワークでユーザー・ロケールが検出されると、戻されるロケールがアプリ ケーション構成ファイル内のサポート対象ロケールの 1 つであるかどうかが検証されます。 検証アルゴリズムは次のとおりです。 1. アプリケーション構成ファイルからサポート対象アプリケーション・ロケールのリスト を取り出します。 2. 検出されたロケールがリストに含まれているかどうかを調べます。リストに含まれてい る場合は、このロケールを現行のクライアントのロケールとして使用します。 3. 検出されたロケールにバリアントがある場合は、そのバリアントを削除して、削除後の ロケールがリストに含まれているかどうかを調べます。たとえば、de_DE_EURO には EURO バリアントがあります。削除後のロケールが de_DE となるようにバリアントを削 除します。 4. ロケールに国コードが含まれている場合は、国コードを削除し、削除後のロケールがリ ストに含まれているかどうかを調べます。たとえば、de_DE には国コード DE がありま す。削除後のロケールが de となるように国コードを削除します。 5. 検出されたロケールがリストにあるどのロケールとも一致しない場合は、アプリケー ション構成ファイルに定義されているデフォルト・ロケールをクライアントのロケール として使用します。 8-20 Oracle Database グローバリゼーション・サポート・ガイド J2EE 用 GDK アプリケーション・フレームワーク 手順 3 および 4 を実行することで、アプリケーションでは、言語要件は同じでもアプリケー ション構成ファイルでの定義とは異なるロケール設定を使用するユーザーをサポートできま す。たとえば、GDK では、de-AT(ドイツ語のオーストリア系バリアント) 、de-CH(ドイ ツ語のスイス系バリアント)および de-LU(ドイツ語のルクセンブルグ系バリアント)をサ ポートできます。 GDK フレームワークの代替ロケール検出機能は、Java Resource Bundle の機能に似ていま すが、Java VM のデフォルト・ロケールの影響を受けません。この例外が発生するのは、 GDK ロケール代替操作では、アプリケーションのデフォルト・ロケールを使用できるため です。 アプリケーション構成ファイルから application-locales セクションを省略すると、GDK はア プリケーションで共通ロケールがサポートされるものと想定します。この共通ロケールは、 OraLocaleInfo.getCommonLocales メソッドから戻されることがあります。 GDK フレームワークでの ASCII 以外の入出力の処理 HTML ページのキャラクタ・セット(または文字コード体系)は、ブラウザやインターネッ ト・アプリケーションにとって重要な情報です。ブラウザは、正しいフォントとキャラク タ・セットのマッピング表をページ表示に使用できるように、この情報を解析する必要があ ります。インターネット・アプリケーションは、HTML フォームからの入力データを指定の エンコーディングに基づいて安全に処理できるように、この情報を知る必要があります。 ページ・エンコーディングは、インターネット・アプリケーションで提供されるロケール用 のキャラクタ・セットとして変換できます。インターネット・アプリケーションで、GDK フレームワークを使用せずに HTML ページ用のページ・エンコーディングを正しく指定す るには、次の操作を実行する必要があります。 1. 指定のロケールについて、必要なページ入力データのキャラクタ・セット・エンコー ディングを判別します。 2. HTTP リクエストと HTTP レスポンスごとに、対応するエンコーディング名を指定しま す。 GDK フレームワークを使用するアプリケーションは、これらの手順を無視できます。アプ リケーション・コードを変更する必要はありません。キャラクタ・セット情報は、GDK ア プリケーション構成ファイル内で指定されます。実行時に、GDK はリクエスト・オブジェ クトとレスポンス・オブジェクトのキャラクタ・セットを自動的に設定します。GDK フ レームワークでは、入力キャラクタ・セットが出力キャラクタ・セットと異なる使用例はサ ポートされません。 GDK アプリケーション・フレームワークでは、HTML ページのキャラクタ・セット設定に 関して次の使用例がサポートされます。 ■ 1 つのローカル・キャラクタ・セットがアプリケーション全体の専用となる場合。この 使用例は、単一言語インターネット・アプリケーションに適しています。キャラクタ・ セットのプロパティによっては、複数の言語をサポートできる場合があります。たとえ ば、ほとんどの西欧言語は ISO-8859-1 で提供できます。 Oracle Globalization Development Kit 8-21 J2EE 用 GDK アプリケーション・フレームワーク ■ ■ すべてのコンテンツに、言語に関係なく Unicode UTF-8 が使用される場合。この使用例 は、配置に Unicode を使用する多言語アプリケーションに適しています。 各言語のネイティブ・キャラクタ・セットが使用される場合。たとえば、英語のコンテ ンツは ISO-8859-1 で表され、日本語のコンテンツは Shift_JIS で表されます。この使用 例は、各ロケールのデフォルトのキャラクタ・セット・マッピングを使用する多言語イ ンターネット・アプリケーションに適しています。アプリケーションでユーザー・ロ ケールに基づいて様々なキャラクタ・セットをサポートする必要がある場合は、この使 用例が役立ちます。たとえば、Unicode フォントがないモバイル・アプリケーション や、Unicode を完全にサポートできないインターネット・ブラウザの場合は、リクエス トごとにキャラクタ・セットを判別する必要があります。 キャラクタ・セット情報は、GDK アプリケーション構成ファイル内で指定されます。次の 例に、すべてのアプリケーション・ページのキャラクタ・セットとして UTF-8 を設定する方 法を示します。 <page-charset>UTF-8</page-charset> ページのキャラクタ・セット情報は ServletRequestWrapper クラスで使用され、リクエ スト・オブジェクトの正しいキャラクタ・セットが設定されます。また、 ServletResponseWrapper クラスに指定されている ContentType HTTP ヘッダーでも、 インスタンス化されるときの出力用に使用されます。page-charset が AUTO-CHARSET に 設定されている場合、キャラクタ・セットは現行のユーザー・ロケールのデフォルト・キャ ラクタ・セットであるとみなされます。page-charset は次のように AUTO-CHARSET に設 定してください。 <page-charset>AUTO-CHARSET</page-charset> デフォルト・マッピングは、LocaleMapper クラスから導出されます。このクラスは、 GDK の Java API でロケール名のデフォルトの IANA キャラクタ・セットを提供します。 表 8-2 に、一般的な ISO ロケールおよび対応する IANA キャラクタ・セットのマッピングを 示します。 8-22 Oracle Database グローバリゼーション・サポート・ガイド J2EE 用 GDK アプリケーション・フレームワーク 表 8-2 一般的な ISO ロケールと IANA キャラクタ・セットのマッピング ISO ロケール NLS_LANGUAGE 値 NLS_TERRITORY 値 IANA キャラクタ・セット ar-SA ARABIC SAUDI ARABIA WINDOWS-1256 de-DE GERMAN GERMANY WINDOWS-1252 en-US AMERICAN AMERICA WINDOWS-1252 en-GB ENGLISH UNITED KINGDOM WINDOWS-1252 el GREEK GREECE WINDOWS-1253 es-ES SPANISH SPAIN WINDOWS-1252 fr FRENCH FRANCE WINDOWS-1252 fr-CA CANADIAN FRENCH CANADA WINDOWS-1252 iw HEBREW ISRAEL WINDOWS-1255 ko KOREAN KOREA EUC-KR ja JAPANESE JAPAN SHIFT_JIS it ITALIAN ITALY WINDOWS-1252 pt PORTUGUESE PORTUGAL WINDOWS-1252 pt-BR BRAZILIAN PORTUGUESE BRAZIL WINDOWS-1252 tr TURKISH TURKEY WINDOWS-1254 nl DUTCH THE NETHERLANDS WINDOWS-1252 zh SIMPLIFIED CHINESE CHINA GBK zh-TW TRADITIONAL CHINESE TAIWAN BIG5 GDK では、ロケールからキャラクタ・セットへのマッピングもカスタマイズできます。 GDK の Java API で定義されているデフォルトのマッピングをオーバーライドするには、ア プリケーション構成ファイル内でロケールからキャラクタ・セットへのマッピング表を指定 できます。 <locale-charset-maps> <locale-charset> <locale>ja</locale><charset>EUC-JP</charset> </locale-charset> </locale-charset-maps> この例は、GDK によりロケール Japanese(ja)のデフォルト・キャラクタ・セットが SHIFT_JIS から EUC-JP に変更されることを示しています。 関連項目 : 8-27 ページ「GDK での Oracle ロケール情報」 Oracle Globalization Development Kit 8-23 J2EE 用 GDK アプリケーション・フレームワーク GDK でのローカライズされたコンテンツの管理 この項の内容は、次のとおりです。 ■ JSP と Java Servlet でのローカライズされたコンテンツの管理 ■ 静的ファイルでのローカライズされたコンテンツの管理 JSP と Java Servlet でのローカライズされたコンテンツの管理 リソース・バンドルを使用すると、J2SE で実行時にローカライズされたコンテンツにアクセ スできます。Java Servlet および JavaServer Pages(JSP)内の翻訳可能な文字列は、Java リ ソース・バンドルに外部化されるため、これらのリソース・バンドルを独立した状態で異な る言語に翻訳できます。翻訳済リソース・バンドルのベース・クラス名は英語バンドルと同 じで、接尾辞として Java ロケール名が使用されます。 リソース・バンドルから翻訳済データを取り出すには、リクエストごとに getBundle() メ ソッドを起動する必要があります。 <% Locale user_locale=request.getLocale(); ResourceBundle rb=ResourceBundle.getBundle("resource",user_locale); %> <%= rb.getString("Welcome") %> GDK フレームワークにより、リソース・バンドルからテキスト文字列を取り出す操作が簡 素化されます。Localizer.getMessage() はリソース・バンドルのラッパーです。 <% Localizer.getMessage ("Welcome") %> アプリケーションでベース・クラス名として getBundle() を指定するかわりに、アプリ ケーション構成ファイルでリソース・バンドルを指定できます。これにより、GDK では、 翻訳済テキスト文字列がリクエストされた場合に、ResourceBundle オブジェクトが自動 的にインスタンス化されます。 <message-bundles> <resource-bundle name="default">resource</resource-bundle> </message-bundles> 構成ファイルでは、複数のリソース・バンドルを指定できます。デフォルト以外のバンドル にアクセスするには、getMessage メソッドの name パラメータを指定します。 静的ファイルでのローカライズされたコンテンツの管理 ロケールを 1 つのみサポートするアプリケーションの場合、通常は、接尾辞 /index.html が付いた URL によりアプリケーションの初期ページが表示されます。 国際化されたアプリケーションでは、通常、異なる言語のコンテンツは別々に格納され、言 語または国名に基づいて異なるディレクトリ内で、または異なるファイル名を使用してス テージングされます。この情報は、アプリケーションでローカライズされたコンテンツを取 り出すための URL の構成に使用されます。 8-24 Oracle Database グローバリゼーション・サポート・ガイド J2EE 用 GDK アプリケーション・フレームワーク 次の例に、索引ページのフランス語バージョンと日本語バージョンを取り出す方法を示しま す。それぞれの接尾辞は次のとおりです。 /fr/index.html /ja/index.html GDK フレームワークは、rewriteURL() メソッドを使用して、翻訳済ファイルを対応する 言語ディレクトリで検索する論理を処理します。ServletHelper.rewriteURL() メソッ ドは、アプリケーション構成ファイルに指定されている規則に基づいて URL を書き換えま す。このメソッドを使用して、ローカライズされたコンテンツがステージングされる正しい 場所が判別されます。 JSP コードの例を次に示します。 <img src="<%="ServletHelper.rewriteURL("image/welcome.jpg", request)%>"> <a href="<%="ServletHelper.rewriteURL("html/welcome.html", request)%>"> URL の書換え定義は、GDK アプリケーション構成ファイル内で定義されます。 <url-rewrite-rule fallback="yes"> <pattern>(.*)/(a-zA-Z0-9_¥]+.)$</pattern> <result>$1/$A/$2</result> </url-rewrite-rule> 書換え規則で定義されている pattern セクションは、正規表現の表記規則に従います。result セクションでは、置換用に次の特殊変数がサポートされます。 ■ ■ ■ ■ $L は、現行のユーザー・ロケールの ISO 639 言語コード部分を表すために使用されま す。 $C は、ISO 3166 の国コードを表します。 $A はロケール文字列全体を表します。ISO 639 の言語コードと ISO 3166 の国コードが、 アンダースコア(_)で連結されます。 $1 ~ $9 は一致した部分文字列を表します。 たとえば、現行のユーザー・ロケールが ja の場合、welcome.jpg イメージ・ファイルの URL は image/ja/welcome.jpg として書き換えられ、welcome.html は html/ja/welcome.html に変更されます。 ServletHelper.rewriteURL() メソッドと Localizer.getMessage() メソッドはど ちらも、ユーザー・ロケールの翻訳ファイルが使用できない場合に一貫したロケール代替操 作を実行します。たとえば、es_MX ロケール(メキシコのスペイン語)のオンライン・ヘル プ・ファイルが使用できなくても、es(スペインのスペイン語)ファイルが使用可能であれ ば、各メソッドはかわりにスペイン語の翻訳済ファイルを選択します。 Oracle Globalization Development Kit 8-25 GDK の Java API GDK の Java API Java のグローバリゼーション機能および動作は、データベースで提供されるものとは異なり ます。たとえば、J2SE では、Oracle のロケールおよびキャラクタ・セットとは異なるロ ケールとキャラクタ・セットのセットがサポートされます。この非一貫性のために、アプリ ケーションに 2 つの異なる表記規則に基づいて書式指定されたデータが含まれていると、 ユーザーが混乱する可能性があります。たとえば、データベースから取り出された日付は Oracle の表記規則(数値と日付の書式指定や言語ソートの順序など)を使用して書式指定さ れても、静的なアプリケーション・データは通常は Java ロケールの表記規則を使用して書 式指定されます。Java のグローバリゼーション機能は、アプリケーションが実行される JDK のバージョンによっても異なる場合があります。 Oracle Database 10g より前のリリースでは、アプリケーションに Oracle グローバリゼー ション機能を取り込む必要がある場合は、データベース・サーバーに接続して SQL 文を発 行する必要がありました。この種の操作があると、アプリケーションは複雑になり、データ ベース・サーバーへのネットワーク接続数が増加します。 GDK の Java API は、Oracle のデータベース・グローバリゼーション機能を中間層に拡張し ます。GDK の Java API を使用すると、開発者はアプリケーションで Oracle の日付および数 値の書式指定や言語ソートなどのグローバリゼーション・ロジックを中間層で実行できるよ うにすることで、データベース内の高コストのプログラミング・ロジックを排除できます。 そのため、データベース・サーバーでのデータベース・ロードやアプリケーション層とデー タベース・サーバー間の不要なネットワーク通信量が減少し、アプリケーション全体のパ フォーマンスが向上します。 また、GDK の Java API は、言語とキャラクタ・セットの検出や、地域または言語に関する 共通ロケール・データ(たとえば、カナダでサポートされている全タイム・ゾーン)の列挙 など、拡張グローバリゼーション機能も提供します。これらは、ほとんどのプログラミン グ・プラットフォームでは使用できないグローバリゼーション機能です。GDK の Java API を使用しない場合、開発者はこれらをアプリケーション内で処理するためのビジネス・ロ ジックを記述する必要があります。 GDK の Java API の主機能は次のとおりです。 ■ GDK での Oracle ロケール情報 ■ GDK での Oracle ロケール・マッピング ■ GDK での Oracle キャラクタ・セット変換(JDK 1.4 以上) ■ GDK での Oracle の日付書式、数値書式および通貨書式 ■ GDK での Oracle のバイナリ・ソートと言語ソート ■ GDK での Oracle 言語およびキャラクタ・セット検出 ■ GDK での Oracle の翻訳済ロケール名とタイム・ゾーン名 ■ 電子メール・プログラムへの GDK の使用 8-26 Oracle Database グローバリゼーション・サポート・ガイド GDK の Java API GDK での Oracle ロケール情報 言語、地域、言語ソートおよびキャラクタ・セットなど、Oracle ロケール定義は GDK の Java API で公開されます。Oracle で使用されるネーミング規則は、他のベンダーとは異なる 場合もあります。これらの名前と定義の多くは業界標準に従っていますが、特別なユーザー 要件にあわせて調整された Oracle 固有の名前や定義もあります。 OraLocaleInfo は、言語、地域および Collator オブジェクトを含む Oracle ロケール・ク ラスです。このクラスには、アプリケーションで特定のロケールについてロケール関連オブ ジェクトのコレクションを取り出すためのメソッドが用意されています。たとえば、GDK で使用可能な Oracle 言語ソートの完全リスト、特定の地域に対して定義されているローカ ル・タイム・ゾーン、特定の地域で使用される共通言語などです。 OraLocaleInfo クラスの使用例を次に示します。 // All Territories supported by GDK String[] avterr = OraLocaleInfo.getAvailableTerritories(); // Local TimeZones for a given Territory OraLocaleInfo oloc = OraLocaleInfo.getInstance("English", "Canada"); TimeZone[] loctz = oloc.getLocalTimeZones(); GDK での Oracle ロケール・マッピング GDK の Java API には LocaleMapper クラスが用意されています。このクラスは、Java、 IANA、ISO および Oracle の間で等価のロケールとキャラクタ・セットをマップします。 Java アプリケーションは、Oracle のロケール名または IANA キャラクタ・セット名に指定 されているクライアントから、ロケール情報を受信できます。この情報を Java アプリケー ションが正しく処理するには、先に等価の Java ロケールまたは Java エンコーディングに マップできる必要があります。 LocaleMapper クラスの使用例を次に示します。 // Mapping from Java locale to Oracle language and Oracle territory Locale locale = new Locale("it", "IT"); String oraLang = LocaleMapper.getOraLanguage(locale); String oraTerr = LocaleMapper.getOraTerritory(locale); // From Oracle language and Oracle territory to Java Locale locale = LocaleMapper.getJavaLocale("AMERICAN","AMERICA"); locale = LocaleMapper.getJavaLocale("TRADITONAL CHINESE", ""); // From IANA & Java to Oracle Character set Oracle Globalization Development Kit 8-27 GDK の Java API String ocs1 String ocs2 = LocaleMapper.getOraCharacterSet( LocaleMapper.IANA, "ISO-8859-1"); = LocaleMapper.getOraCharacterSet( LocaleMapper.JAVA, "ISO8859_1"); LocaleMapper クラスは、Windows および UNIX プラットフォームの両方で特定のロケー ルに最も一般的に使用されている、電子メール・キャラクタ・セットを戻すこともできま す。これは、電子メール・メッセージを処理する必要のある Java アプリケーションの開発 時に役立ちます。 関連項目 : 8-34 ページ「電子メール・プログラムへの GDK の使用」 GDK での Oracle キャラクタ・セット変換(JDK 1.4 以上) キャラクタ・セット変換( GDK の Java API には、ユーザーが Oracle キャラクタ・セット変換を実行できるように、一 連のキャラクタ・セット変換クラス API が含まれています。Java JDK には多数の標準キャ ラクタ・セットの変換を実行できるクラスがすでに付属していますが、Oracle 固有のキャラ クタ・セットと Oracle のユーザー定義キャラクタ・セットはサポートしていません。 JDK 1.4 では、J2SE に開発者が Java キャラクタ・セットの拡張に使用するインタフェースが 導入されています。GDK の Java API は、このプラグイン機能を使用して Oracle のキャラク タ・セットに対する暗黙的なサポートを提供します。J2SE API にアクセスして、Oracle 固有 の動作を取得できます。 図 8-5 に、GDK キャラクタ・セット変換表が Java キャラクタ・セット表と同じ方法で J2SE にプラグインされる状況を示します。この J2SE の交換可能フレームワークにより、Oracle キャラクタ・セット変換を他の Java キャラクタ・セット変換と同じ方法で使用できます。 図 8-5 Oracle キャラクタ・セット・プラグイン バージョン 1.4 より前の JDK では java.nio.charset Java パッケージを使用できないた め、Oracle のキャラクタ・セット・プラグイン機能を使用するには JDK 1.4 以上をインス トールする必要があります。 8-28 Oracle Database グローバリゼーション・サポート・ガイド GDK の Java API GDK のキャラクタ・セット変換クラスでは、ユーザー定義キャラクタ・セットなど、すべ ての Oracle キャラクタ・セットがサポートされます。Java アプリケーションでは、このク ラスを使用して、Java の内部キャラクタ・セットである UTF-16 との間で正しく変換できま す。 Oracle のキャラクタ・セット名はオラクル社独自の名前です。Java 独自のキャラクタ・セッ トとの競合の可能性を回避するために、すべての Oracle キャラクタ・セット名には、Java の API を介してすべてを暗黙的に使用するための X-ORACLE- 接頭辞が付いています。 Oracle キャラクタ・セット変換の使用例を次に示します。 // Converts the Chinese character "three" from UCS2 to JA16SJIS String str = "¥u4e09"; byte[] barr = str.getBytes("x-oracle-JA16SJIS"); 他の Java キャラクタ・セットと同様に、java.nio.charset.Charset のキャラクタ・ セット機能もすべての Oracle キャラクタ・セットに適用されます。たとえば、指定した キャラクタ・セットが他のキャラクタ・セットのスーパーセットかどうかを調べる場合は、 次のように Charset.contains メソッドを使用できます。 Charset Charset // true boolean cs1 = Charset.forName("x-oracle-US7ASCII"); cs2 = Charset.forName("x-oracle-WE8WINDOWS1252"); if WE8WINDOWS1252 is the superset of US7ASCII, otherwise false. osc = cs2.contains(cs1); JDBC ドライバを使用してデータベースと通信する Java アプリケーションの場合は、JDBC ドライバがアプリケーションとデータベース間で必要なキャラクタ・セット変換を提供しま す。アプリケーション内で GDK キャラクタ・セット変換メソッドを明示的にコールする必 要はありません。Oracle のキャラクタ・セット・エンコーディング形式に基づいてテキス ト・ファイルを解析および生成する Java アプリケーションは、Oracle キャラクタ・セット 変換クラスの使用例の 1 つです。 Oracle Globalization Development Kit 8-29 GDK の Java API GDK での Oracle の日付書式、数値書式および通貨書式 GDK の Java API には書式クラスが用意されており、このクラスでは oracle.i18n.text パッケージ内の Java アプリケーション用 Oracle 表記規則を使用して日付、数値および通貨 の各書式がサポートされます。 日付、数値および通貨の長い書式と短い書式など、Oracle Database 10g で新しく導入された ロケールの書式も、これらの書式クラスで公開されます。 Oracle の日付書式、数値書式および通貨書式の例を次に示します。 // Obtain the current date and time in the default Oracle LONG format for // the locale de_DE (German_Germany) Locale locale = new Locale("de", "DE"); OraDateFormat odf = OraDateFormat.getDateTimeInstance(OraDateFormat.LONG, locale); // Obtain the numeric value 1234567.89 using the default number format // for the Locale en_IN (English_India) locale = new Locale("en", "IN"); OraNumberFormat onf = OraNumberFormat.getNumberInstance(locale); String nm = onf.format(new Double(1234567.89)); // Obtain the monetary value 1234567.89 using the default currency // format for the Locale en_US (American_America) locale = new Locale("en", "US"); onf = OraNumberFormat.getCurrencyInstance(locale); nm = onf.format(new Double(1234567.89)); 8-30 Oracle Database グローバリゼーション・サポート・ガイド GDK の Java API GDK での Oracle のバイナリ・ソートと言語ソート Oracle では、データベースでのバイナリ・ソート、単一言語ソートおよび多言語ソートがサ ポートされています。Oracle Database 10g では、これらのソートが拡張されており、データ ベース内で大 / 小文字を区別しないソートおよび検索機能とアクセントを区別しないソート および検索機能が提供されます。GDK の Java API の OraCollator クラスを使用すると、 Java アプリケーションでは、大 / 小文字区別なしのオプションやアクセント区別なしのオプ ションなど、最新の Oracle のバイナリ・ソート機能と言語ソート機能に基づいて情報を ソートしたり検索できます。 正規化がソートの重要部分になることがあります。文字の複合と分解は Unicode 規格に基づ くため、ソートも Unicode 規格に依存します。JDK の各バージョンでサポートされる Unicode 規格のバージョンは異なる場合があるため、GDK には Unicode 3.2 規格に基づく OraNormalizer クラスが用意されています。このクラスには、複合を実行するメソッドが あります。 バイナリ・ソートのソート順は、使用中の Oracle キャラクタ・セットに基づきます。GDK の Java API では、UTFE キャラクタ・セットを除き、すべての Oracle キャラクタ・セット のバイナリ・ソートがサポートされます。GDK の Java API でサポートされない言語ソート は JAPANESE のみですが、JAPANESE_M を使用すると、同様でより正確なソート結果を得 ることができます。 文字列比較と文字列ソートの例を次に示します。 // compares strings using XGERMAN private static String s1 = "abcSS"; private static String s2 = "abc¥u00DF"; String cname = "XGERMAN"; OraCollator ocol = OraCollator.getInstance(cname); int c = ocol.compare(s1, s2); // sorts strings using GENERIC_M private static String[] source = new String[] { "Hochgeschwindigkeitsdrucker", "Bildschirmfu¥u00DF", "Skjermhengsel", "DIMM de Mem¥u00F3ria", "M¥u00F3dulo SDRAM com ECC", }; Oracle Globalization Development Kit 8-31 GDK の Java API cname = "GENERIC_M"; ocol = OraCollator.getInstance(cname); List result = getCollationKeys(source, ocol); private static List getCollationKeys(String[] source, OraCollator ocol) { List karr = new ArrayList(source.length); for (int i = 0; i < source.length; ++i) { karr.add(ocol.getCollationKey(source[i])); } Collections.sort(karr); // sorting operation return karr; } GDK での Oracle 言語およびキャラクタ・セット検出 GDK の Java API の Oracle 言語およびキャラクタ・セット検出 Java クラスは、未指定のテ キストのキャラクタ・セットと言語を判別するための、統計に基づく高パフォーマンスのエ ンジンを提供します。このエンジンは、世界中の言語とキャラクタ・セットのペアを自動的 に識別できます。言語およびキャラクタ・セット検出エンジンでは、各テキストを使用して 一連の確率が設定され、各確率は 1 つの言語およびキャラクタ・セットのペアに対応しま す。統計的に最も可能性の高いペアにより、主要な言語とキャラクタ・セットが識別されま す。 発行されたテキストの純粋性は、言語およびキャラクタ・セット検出の正確さに影響しま す。受け入れられるのはプレーン・テキストの文字列のみのため、タグは事前に削除する必 要があります。理想的なケースは、外国語や文法上の誤りがほとんどない文学の教科書で す。テキスト文字列に複数の言語やキャラクタ・セット、または住所、電話番号およびプロ グラミング言語コードのように自然でない言語によるテキストが含まれていると、適切な結 果が得られない可能性があります。 LCSDetector クラスは、1 つのバイト配列、文字配列、文字列および InputStream クラ スの言語とキャラクタ・セットを検出できます。このクラスは、長さまたはオフセットと長 さの両方が指定されると、入力全体またはその一部をサンプリングに使用できます。 LCSDetector クラスは、入力ごとに可能性のある言語とキャラクタ・セットのペアを最大 3 つまで戻すことができます。これらの候補は常に順番にランク付けされ、最も確率の高い ペアが最初に戻されます。 関連項目 : サポートされている言語とキャラクタ・セットのペアのリス トは、A-24 ページの「言語およびキャラクタ・セット検出のサポート」 を参照してください。 8-32 Oracle Database グローバリゼーション・サポート・ガイド GDK の Java API 次の例に、LCSDetector クラスを使用して言語およびキャラクタ・セット検出機能を使用 可能にする方法を示します。 // This example detects the character set of a plain text file "foo.txt" and // then appends the detected ISO character set name to the name of the text file LCSDetector lcsd = new LCSDetector(); File oldfile = new File("foo.txt"); FileInputStream in = new FileInputStream(oldfile); lcsd.detect(in); String charset = lcsd.getResult().getIANACharacterSet(); File newfile = new File("foo."+charset+".txt"); oldfile.renameTo(newfile); // This example shows how to use the LCSDector class to detect the language and // character set of a byte array int offset = 0; LCSDetector led = new LCSDetector(); /* loop through the entire byte array */ while ( true ) { bytes_read = led.detect(byte_input, offset, 1024); if ( bytes_read == -1 ) break; offset += bytes_read; } LCSDResultSet res = led.getResult(); /* print the detection results with close ratios */ System.out.println("the best guess " ); System.out.println("Langauge " + res.getOraLanguage() ); System.out.println("CharacterSet " + res.getOraCharacterSet() ); int high_hit = res.getHiHitPairs(); if ( high_hit >= 2 ) { System.out.println("the second best guess " ); System.out.println("Langauge " + res.getOraLanguage(2) ); System.out.println("CharacterSet " +res.getOraCharacterSet(2) ); } if ( high_hit >= 3 ) { System.out.println("the third best guess "); System.out.println("Langauge " + res.getOraLanguage(3) ); System.out.println("CharacterSet " +res.getOraCharacterSet(3) ); } Oracle Globalization Development Kit 8-33 GDK の Java API GDK での Oracle の翻訳済ロケール名とタイム・ゾーン名 Oracle の言語名、地域名、キャラクタ・セット名、言語ソート名およびタイム・ゾーン名は すべて、英語を含む 27 の言語に翻訳されています。これらはそのままユーザー・アプリ ケーションに組み込むことができ、異なる言語を使用するユーザー・アプリケーション間で 表示名に一貫性をもたらします。OraDisplayLocaleInfo は、ロケールと属性の翻訳を提 供するユーティリティ・クラスです。翻訳済の名前は、ユーザー・インタフェースのテキス トやドロップダウン選択ボックスに表示する場合に役立ちます。たとえば、ネイティブのフ ランス語ユーザーは、英語よりもフランス語で表示されたタイム・ゾーン・リストから選択 するほうを好みます。 次の例に、OraDisplayLocaleInfo を使用して、カナダでサポートされているタイム・ ゾーン・リストをフランス語の翻訳名を使用して戻す方法を示します。 OraLocaleInfo oloc = OraLocaleInfo.getInstance("CANADIAN FRENCH", "CANADA"); OraDisplayLocaleInfo odloc = OraDisplayLocaleInfo.getInstance(oloc); TimeZone[] loctzs = oloc.getLocaleTimeZones(); String [] disptz = new string [loctzs.length]; for (int i=0; i<loctzs.length; ++i) { disptz [i]= odloc.getDisplayTimeZone(loctzs[i]); ... } 電子メール・プログラムへの GDK の使用 GDK の LocaleMapper クラスを使用すると、最も一般的に使用されている電子メール・ キャラクタ・セットを取り出すことができます。 LocaleMapper.getIANACharSetFromLocale をロケール・オブジェクト内で渡して コールします。戻り値は、キャラクタ・セット名の配列です。最初に戻されるキャラクタ・ セットが、最も一般的に使用されている電子メール・キャラクタ・セットです。 次に、GDK で簡体字中国語を含む電子メール・メッセージを送信する例を示します。 import oracle.i18n.util.LocaleMapper; import java.util.Date; import java.util.Locale; import java.util.Properties; import javax.mail.Message; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeUtility; /** * Email send operation sample * * javac -classpath orai18n.jar:j2ee.jar EmailSampleText.java 8-34 Oracle Database グローバリゼーション・サポート・ガイド GDK の Java API * java -classpath .:orai18n.jar:j2ee.jar EmailSampleText */ public class EmailSampleText { public static void main(String[] args) { send("localhost", // smtp host name "[email protected]", // from email address "You", // from display email "[email protected]", // to email address "Subject test zh CN", // subject "Content •4E02 4E02 from Text email", // body new Locale("zh", "CN") // user locale ); } public static void send(String smtp, String fromEmail, String fromDispName, String toEmail, String subject, String content, Locale locale ) { // get the list of common email character sets final String[] charset = LocaleMapper.getIANACharSetFromLocale(LocaleMapper. EMAIL_WINDOWS, locale ); // pick the first one for the email encoding final String contentType = "text/plain; charset=" + charset[0]; try { Properties props = System.getProperties(); props.put("mail.smtp.host", smtp); // here, set username / password if necessary Session session = Session.getDefaultInstance(props, null); MimeMessage mimeMessage = new MimeMessage(session); mimeMessage.setFrom(new InternetAddress(fromEmail, fromDispName, charset[0] ) ); mimeMessage.setRecipients(Message.RecipientType.TO, toEmail); mimeMessage.setSubject(MimeUtility.encodeText(subject, charset[0], "Q")); // body mimeMessage.setContent(content, contentType); mimeMessage.setHeader("Content-Type", contentType); mimeMessage.setHeader("Content-Transfer-Encoding", "8bit"); mimeMessage.setSentDate(new Date()); Transport.send(mimeMessage); } catch (Exception e) Oracle Globalization Development Kit 8-35 GDK アプリケーション構成ファイル { e.printStackTrace(); } } } GDK アプリケーション構成ファイル GDK アプリケーション構成ファイルでは、GDK アプリケーション・フレームワークの動作 およびプロパティと、それを使用するアプリケーションを指定します。このファイルには、 アプリケーション構成に関するロケール・マッピング表およびパラメータが含まれます。ア プリケーションごとに構成ファイルが 1 つ必要です。 gdkapp.xml アプリケーション構成ファイルは XML 文書です。このファイルは、アプリ ケーションの J2EE 環境の ./WEB-INF ディレクトリにあります。 次の項では、アプリケーション構成ファイルの内容とプロパティの詳細を説明します。 ■ locale-charset-map ■ page-charset ■ application-locales ■ locale-determine-rule ■ locale-parameter-name ■ message-bundles ■ url-rewrite-rule ■ 例 : GDK アプリケーション構成ファイル 8-36 Oracle Database グローバリゼーション・サポート・ガイド GDK アプリケーション構成ファイル locale-charset-map このセクションを使用すると、アプリケーションでデフォルト言語から GDK が提供する キャラクタ・セットへのマッピングをオーバーライドできます。このマッピングは、 page-charset が AUTO-CHARSET に設定されている場合に使用されます。 たとえば、en ロケールの場合、デフォルトの GDK キャラクタ・セットは windows-1252 です。ただし、アプリケーションで ISO-8859-1 が必要な場合は、次のように指定できま す。 <locale-charset-maps> <locale-charset> <locale>en</locale> <charset>ISO_8859-1</charset> </locale-charset> </locale-charset-maps> ロケール名は言語コードと国コードからなり、それぞれ ISO 639 および ISO 3166 で定義され ている ISO ネーミング規則に従う必要があります。キャラクタ・セット名は IANA 表記規 則に従います。 オプションで、マッピング表で user-agent パラメータを指定して、様々なクライアントを区 別できます。 <locale-charset> <locale>en,de</locale> <user-agent>^Mozilla⁄4.0</user-agent> <charset>ISO-8859-1</charset> </locale-charset> この例は、HTTP ヘッダーの user-agent 値が英語(en)およびドイツ語(de)ロケール について Mozilla/4.0(Web クライアントの旧バージョンを指定)から始まる場合、GDK ではキャラクタ・セットが ISO-8859-1 に設定されることを示しています。 カンマ区切りのリストを使用して、複数のロケールを指定できます。 関連項目 : 8-38 ページ「page-charset」 Oracle Globalization Development Kit 8-37 GDK アプリケーション構成ファイル page-charset このセクションでは、アプリケーション・ページのキャラクタ・セットを定義します。この セクションが特定のキャラクタ・セットに明示的に設定されている場合は、すべてのページ でこのキャラクタ・セットが使用されます。キャラクタ・セット名は、IANA キャラクタ・ セットの表記規則に従う必要があります。 <page-charset>UTF-8</page-charset> ただし、page-charset が AUTO-CHARSET に設定されている場合、キャラクタ・セットは 現行のユーザー・ロケールのデフォルト・キャラクタ・セットに基づきます。デフォルトの キャラクタ・セットは、アプリケーション構成ファイルで指定されているロケールからキャ ラクタ・セットへのマッピング表から導出されます。 アプリケーション構成ファイル内のキャラクタ・セット・マッピング表が使用できない場 合、キャラクタ・セットは GDK 内のデフォルト・ロケール名から IANA キャラクタ・セッ トへのマッピング表に基づきます。デフォルト・マッピングは、OraLocaleInfo クラスか ら導出されます。 関連項目 : ■ 8-37 ページ「locale-charset-map」 ■ 8-21 ページ「GDK フレームワークでの ASCII 以外の入出力の処理」 application-locales このタグ・セクションでは、アプリケーションでサポートされているロケールのリストを定 義します。 <application-locales> <locale default="yes">en-US</locale> <locale>de</locale> <locale>zh-CN</locale> </application-locales> 言語要素が * 国コードで指定されている場合は、この言語コードを持つすべてのロケール名 が適格となります。たとえば、アプリケーション・ロケールの 1 つとして de-*(ドイツ語 の言語コード)が定義されている場合は、de-AT(ドイツ語 - オーストリア) 、de(ドイツ 語 - ドイツ)、de-LU(ドイツ語 - ルクセンブルグ) 、de-CH(ドイツ語 - スイス)のみでな く、de-CN(ドイツ語 - 中国)のように例外的なロケールの組合せもサポートされます。た だし、アプリケーションは事前定義済のロケール・セットをサポートするように制限できま す。 サポートされていないロケールを使用してアプリケーションに接続するユーザー用の代替ロ ケールとして使用できるように、アプリケーション・ロケールの 1 つをデフォルトのアプリ ケーション・ロケールとして設定(default="yes" を指定)することをお薦めします。 8-38 Oracle Database グローバリゼーション・サポート・ガイド GDK アプリケーション構成ファイル locale-determine-rule このセクションでは、優先ユーザー・ロケールの判別順序を定義します。ロケール・ソース は、アプリケーションでの使用例に基づいて指定する必要があります。このセクションでの 使用例は、次のとおりです。 ■ 使用例 1: GDK フレームワークは常に許容言語を使用します。 <locale-source>oracle.i18n.servlet.localesource.HTTPAcceptLanguage</locale-source> ■ 使用例 2: デフォルトでは、GDK フレームワークは許容言語を使用します。ユーザーが ロケールを指定すると、そのロケールが以降の操作に使用されます。 <locale-source>oracle.i18n.servlet.localesource.UserInput</locale-source> <locale-source>oracle.i18n.servlet.localesource.HTTPAcceptLanguage</locale-source> ■ 使用例 3: デフォルトでは、GDK フレームワークは許容言語を使用します。ユーザーの 認証後、GDK フレームワークはデータベースのロケール・ソースを使用します。デー タベースのロケール・ソースは、ユーザーがログアウトするまでキャッシュに残りま す。ユーザーがログアウトした後は、再び許容言語が使用されます。 <db-locale-source data-source-name="jdbc/OracleCoreDS" locale-source-table="customer" user-column="customer_email" user-key="userid" language-column="nls_language" territory-column="nls_territory" timezone-column="timezone" >oracle.i18n.servlet.localesource.DBLocaleSource</db-locale-source> <locale-source>oracle.i18n.servlet.localesource.HttpAcceptLanguage</locale-source> 使用例 3 には、事前定義済のデータベース・ロケール・ソース DBLocaleSource が含まれ ていることに注意してください。これにより、カスタムのデータベース・ロケール・ソース を記述せずに、構成ファイル内でユーザー・プロファイル情報を指定できます。この例で は、ユーザー・プロファイル表は "customer" です。列は "customer_email"、 "nls_language"、"nls_territory" および "timezone" です。各列には、一意の電子 メール・アドレス、使用言語の Oracle 名、使用地域の Oracle 名およびユーザーのタイム・ ゾーン ID が格納されます。user-key は必須属性で、アプリケーションから GDK フレー ムワークにユーザー ID を渡すために使用する属性名を指定します。 ■ 使用例 4: GDK フレームワークは最初のページに許容言語を使用します。ユーザーがロ ケールを入力すると、そのロケールがキャッシュされ、ユーザーがアプリケーションに ログインするまで使用されます。ユーザーの認証後、GDK フレームワークはデータ ベースのロケール・ソースを使用します。データベースのロケール・ソースは、ユー ザーがログアウトするまでキャッシュに残ります。ユーザーがログアウトした後は、再 び許容言語が使用されるか、ユーザーがロケールを入力するとユーザー入力が使用され ます。 Oracle Globalization Development Kit 8-39 GDK アプリケーション構成ファイル <locale-source>demo.DatabaseLocaleSource</locale-source> <locale-source>oracle.i18n.servlet.localesource.UserInput</locale-source> <locale-source>oracle.i18n.servlet.localesource.HttpAcceptLanguage</locale-source> 使用例 4 では、カスタムのデータベース・ロケール・ソースを使用していることに注意して ください。ユーザー・プロファイル情報が複数の表にわかれている場合など、ユーザー・プ ロファイル・スキーマが複雑な場合は、アプリケーションがカスタムのロケール・ソースを 提供する必要があります。カスタム・ロケール・ソースの例は、 $ORACLE_HOME/nls/gdk/demo ディレクトリにあります。 locale-parameter-name このタグでは、現行のユーザー・ロケールをリクエスト間で渡すことができるように、ユー ザー入力で使用されるロケール・パラメータの名前を定義します。 表 8-3 に、GDK フレームワークで使用されるパラメータを示します。 表 8-3 GDK フレームワークで使用されるロケール・パラメータ デフォルトのパラメータ名 値 ロケール(locale) ISO ロケール。ISO 639 の言語コードと ISO 3166 の国コードをアンダースコア(_) またはハイフン(-)でつないだものです。たとえば、中国で使用される簡体字中国 語の場合は zh_CN となります。 language Oracle の言語名。たとえば、米英語の場合は AMERICAN です。 territory Oracle の地域名。たとえば、SPAIN です。 timezone タイム・ゾーン名。たとえば、American/Los_Angeles です。 iso-currency ISO 4217 の通貨コード。たとえば、ユーロの場合は EUR です。 date-format 日付書式のパターン・マスク。たとえば、DD_MON_RRRR です。 long-date-format 長い日付書式のパターン・マスク。たとえば、DAY-YYY-MM-DD です。 date-time-format 日時書式のパターン・マスク。たとえば、DD-MON-RRRR HH24:MI:SS です。 long-date-time-format 長い日時書式のパターン・マスク。たとえば、DAY YYYY-MM-DD HH12:MI:SS AM です。 time-format 時刻書式のパターン・マスク。たとえば、HH:MI:SS です。 number-format 数値書式。たとえば、9G99G990D00 です。 currency-format 通貨書式。たとえば、L9G99G990D00 です。 linguistic-sorting 言語ソート順序名。たとえば、日本語の多言語ソートの場合は JAPANESE_M です。 8-40 Oracle Database グローバリゼーション・サポート・ガイド GDK アプリケーション構成ファイル 表 8-3 GDK フレームワークで使用されるロケール・パラメータ(続き) デフォルトのパラメータ名 値 charset キャラクタ・セット。たとえば、WE8ISO8859P15 です。 writing-direction 書込み方向を示す文字列。たとえば、左から右への書込み方向の場合は LTR、右から 左への書込み方向の場合は RTL です。 command GDK コマンド。たとえば、更新操作の場合は store です。 各パラメータ名は、HTML フォームまたは URL でパラメータに使用されます。 message-bundles このタグでは、アプリケーションで使用されるリソース・バンドルのベース・クラス名を定 義します。マッピングは、リソース・バンドル内の翻訳済テキストを検索する Localizer.getMessage メソッドに使用されます。 <message-bundles> <resource-bundle>Messages</resource-bundle> <resource-bundle name="newresource">NewMessages</resource-bundle> </message-bundles> 名前属性を指定しない場合、または <resource-bundle> タグに name="default" とし て指定した場合は、対応するリソース・バンドルがデフォルトのメッセージ・バンドルとし て使用されます。アプリケーションで複数のリソース・バンドルをサポートするには、デ フォルト以外のリソース・バンドルにリソース・バンドル名を割り当てる必要があります。 デフォルト以外のバンドル名は、getMessage メソッドのパラメータとして渡してくださ い。 次に例を示します。 Localizer loc = ServletHelper.getLocalizerInstance(request); String translatedMessage = loc.getMessage("Hello"); String translatedMessage2 = loc.getMessage("World", "newresource"); Oracle Globalization Development Kit 8-41 GDK アプリケーション構成ファイル url-rewrite-rule このタグは、URL 書換え操作の動作を制御するために使用されます。書換え規則は正規表現 です。 <url-rewrite-rule fallback="no"> <pattern>(.*)/([^/]+)$</pattern> <result>$1/$L/$2</result> </url-rewrite-rule> 関連項目 : 理」 8-24 ページ「GDK でのローカライズされたコンテンツの管 リクエストされたロケールについてローカライズされたコンテンツが使用できない場合、 GDK フレームワークは最も近い翻訳ロケールにマップして、ロケール代替メカニズムをト リガーできます。デフォルトでは、代替オプションはオフに設定されます。 fallback="yes" を指定すると、このオプションをオンに設定できます。 たとえば、アプリケーションでサポートされている翻訳が en、de および ja のみで、en が アプリケーションのデフォルト・ロケールであるとします。現行のアプリケーション・ロ ケールが de-US の場合は、かわりに de が使用されます。ユーザーがアプリケーション・ロ ケールとして zh-TW を選択すると、かわりに en が使用されます。 サポートされているアプリケーション・ロケールの数が翻訳ロケール数よりも多い場合は、 通常、代替メカニズムが必要になります。この代替が発生するのは、一般に複数のロケール が 1 つの翻訳を共有している場合です。その一例がスペイン語です。アプリケーションは、 スペインのみでなくスペイン語圏の複数の国を 1 組の翻訳ファイルでサポートする必要があ る場合があります。 デフォルト以外の URL 書換え規則に名前属性を割り当てると、複数の URL 書換え規則を指 定できます。デフォルト以外の URL 書換え規則を使用するには、その規則名を rewriteURL メソッドのパラメータとして渡す必要があります。次に例を示します。 <img src="<%=ServletHelper.rewriteURL("images/welcome.gif", request) %>"> <img src="<%=ServletHelper.rewriteURL("US.gif", "flag", request) %>"> 最初の規則では、"images/welcome.gif" の URL がローカライズされた welcome イメー ジ・ファイルに変更されます。第 2 の規則 "flag" では、"US.gif" の URL がユーザーの 国旗のイメージ・ファイルに変更されます。規則は次のように定義する必要があります。 <url-rewrite-rule fallback="yes"> <pattern>(.*)/([^/]+)$</pattern> <result>$1/$L/$2</result> </url-rewrite-rule> <url-rewrite-rule name="flag"> <pattern>US.gif/pattern> <result>$C.gif</result> </url-rewrite-rule> 8-42 Oracle Database グローバリゼーション・サポート・ガイド GDK アプリケーション構成ファイル 例 : GDK アプリケーション構成ファイル この項では、次のアプリケーション・プロパティを使用してアプリケーション構成ファイル の例を示します。 ■ アプリケーションでサポートしているロケールは、アラビア語(ar) 、ギリシャ語 (el)、英語(en) 、ドイツ語(de) 、フランス語(fr)、日本語(ja)および中国の簡 体字中国語(zh-CN)です。 ■ 英語がデフォルトのアプリケーション・ロケールです。 ■ ja ロケールのページ・キャラクタ・セットは常に UTF-8 です。 ■ ■ ■ ■ ■ Internet Explorer クライアント使用時の、en および de ロケールのページ・キャラクタ・ セットは windows-1252 です。 他の Web ブラウザ・クライアントでの en、de および fr ロケールのページ・キャラク タ・セットは iso-8859-1 です。 他のすべてのロケールのページ・キャラクタ・セットは、そのロケールのデフォルトの キャラクタ・セットです。 ユーザー・ロケールは、ユーザー入力ロケール、Accept-Language の順に判別されま す。 ローカライズされたコンテンツは、該当言語のサブフォルダに格納されます。フォルダ 名は、ISO 639 の言語コードから導出されます。各フォルダは、アプリケーションの ルート・ディレクトリにあります。たとえば、/shop/welcome.jpg の日本語ファイ ルは /ja/shop/welcome.jpg に格納されます。 <?xml version="1.0" encoding="utf-8"?> <gdkapp xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="gdkapp.xsd"> <!-- Language to Character set mapping --> <locale-charset-maps> <locale-charset> <locale>ja</locale> <charset>UTF-8</charset> </locale-charset> <locale-charset> <locale>en,de</locale> <user-agent>^Mozilla¥/[0-9¥. ]+¥(compatible; MSIE [^;]+; ¥)</user-agent> <charset>WINDOWS-1252</charset> </locale-charset> <locale-charset> <locale>en,de,fr</locale> <charset>ISO-8859-1</charset> </locale-charset> </locale-charset-maps> Oracle Globalization Development Kit 8-43 Java 用 GDK 提供のパッケージおよびクラス <!-- Application Configurations --> <page-charset>AUTO-CHARSET</page-charset> <application-locales> <locale>ar</locale> <locale>de</locale> <locale>fr</locale> <locale>ja</locale> <locale>el</locale> <locale default="yes">en</locale> <locale>zh-CN</locale> </application-locales> <locale-determine-rule> <locale-source>oracle.i18n.servlet.localesource.UserInput</locale-source> <locale-source>oracle.i18n.servlet.localesource.HttpAcceptLanguage</locale-source> </locale-determine-rule> <!-- URL rewriting rule --> <url-rewrite-rule fallback="no"> <pattern>(.*)/([^/]+)$</pattern> <result>/$L/$1/$2</result> </url-rewrite-rule> </gdkapp> Java 用 GDK 提供のパッケージおよびクラス Oracle Globalization Services for Java には、次のパッケージが含まれています。 ■ oracle.i18n.lcsd ■ oracle.i18n.net ■ oracle.i18n.servlet ■ oracle.i18n.text ■ oracle.i18n.util 関連項目 : 『Oracle Globalization Development Kit Java API Reference』 8-44 Oracle Database グローバリゼーション・サポート・ガイド Java 用 GDK 提供のパッケージおよびクラス oracle.i18n.lcsd oracle.i18n.lcsd パッケージには、テキスト入力に基づいて言語とキャラクタ・セット を自動的に検出して認識するクラスが用意されています。言語は ISO に基づき、エンコー ディングは IANA または Oracle キャラクタ・セットに基づきます。このパッケージには次 のクラスがあります。 ■ ■ LCSDetector: テキスト入力に基づいて言語とキャラクタ・セットを自動的に検出して 認識するメソッドが含まれています。 LCSDResultSet: LCSDResultSet クラスは、LCSDetector により生成される結果の 格納用です。このクラスのメソッドを使用すると、結果から特定の情報を取り出すこと ができます。 oracle.i18n.net oracle.i18n.net パッケージは、グローバリゼーションのためのインターネット関連の データ変換を提供します。このパッケージには次のクラスがあります。 ■ ■ CharEntityReference: 文字列を文字参照形式または実体参照形式との間でエスケー プまたはアンエスケープするためのユーティリティ・クラスです。 CharEntityReference.Form: エスケープ形式を指定するフォーム・パラメータ・ク ラスです。 oracle.i18n.servlet oracle.i18n.Servlet パッケージを使用すると、JSP および Java Servlet で自動ロケー ル・サポートを使用でき、ローカライズされたコンテンツをアプリケーションに戻すことも できます。このパッケージには次のクラスがあります。 ■ ■ ■ ApplicationContext: フレームワークでアプリケーション・スコープ操作を制御する アプリケーション・コンテキスト・クラスです。 Localizer: 最も一般に使用されるグローバリゼーション情報へのアクセスを可能にす るオールインワン・オブジェクト・クラスです。 ServletHelper: Java Servlet とグローバリゼーション・オブジェクト間を結ぶ委譲ク ラスです。 Oracle Globalization Development Kit 8-45 Java 用 GDK 提供のパッケージおよびクラス oracle.i18n.text oracle.i18n.text パッケージは、汎用的なテキスト・データ・グローバリゼーション・ サポートを提供します。このパッケージには次のクラスがあります。 ■ ■ ■ ■ ■ ■ ■ OraCollationKey: 特定の OraCollator オブジェクトの特定の規則に基づく String を表すクラスです。 OraCollator: 言語照合やバイナリ・ソートなど、ロケール依存の文字列比較を実行す るクラスです。 OraDateFormat: 日時と文字列のロケール間で書式指定と解析を実行する抽象クラスで す。Oracle の日時書式の指定動作をサポートします。 OraDecimalFormat: 数値と文字列のロケール間で書式指定と解析を実行する具象クラ スです。Oracle の数値書式の指定動作をサポートします。 OraDecimalFormatSymbol: Oracle の数値書式と通貨書式に使用される Oracle の書式 記号を維持するクラスです。 OraNumberFormat: 数値と文字列のロケール間で書式指定と解析を実行する抽象クラ スです。Oracle の数値書式の指定動作をサポートします。 OraSimpleDateFormat: 日時と文字列のロケール間で書式指定と解析を実行する具象 クラスです。Oracle の日時書式の指定動作をサポートします。 oracle.i18n.util oracle.i18n.util パッケージは、グローバリゼーション・サポート用の汎用ユーティリ ティを提供します。このパッケージには次のクラスがあります。 ■ ■ ■ ■ LocaleMapper: Oracle のロケール要素と他のベンダーおよび規格の等価ロケール要素 の間のマッピングを提供します。 OraDisplayLocaleInfo: ロケールと属性の翻訳を提供する翻訳ユーティリティ・ク ラスです。 OraLocaleInfo: 言語、地域および Collator オブジェクトを含む Oracle ロケール・ク ラスです。 OraSQLUtil: SQL を処理する便利なメソッドを含む Oracle SQL Utility クラスです。 8-46 Oracle Database グローバリゼーション・サポート・ガイド GDK エラー・メッセージ PL/SQL 用 GDK 提供のパッケージ PL/SQL 用 GDK には、次の PL/SQL パッケージが含まれています。 ■ UTL_I18N ■ UTL_LMS UTL_I18N は、開発者が国際化されたアプリケーションを構築する際に役立つ PL/SQL サー ビスのセットです。UTL_I18N PL/SQL パッケージは、次のファンクションを提供します。 ■ ■ ■ ■ 各種データ型の文字列変換ファンクション HTML および XML 文書で使用される事前定義済の文字とマルチバイト・キャラクタの エスケープ・シーケンスとアンエスケープ・シーケンス Oracle、Internet Assigned Numbers Authority(IANA) 、ISO および電子メール・アプ リケーションのキャラクタ・セット、言語および地域間でマップするファンクション Oracle 言語名から Oracle キャラクタ・セット名を戻すファンクション UTL_LMS は、様々な言語でエラー・メッセージを取り出して書式指定します。 関連項目 : 『PL/SQL パッケージ・プロシージャおよびタイプ・リファレ ンス』 GDK エラー・メッセージ GDK-03001: Invalid or unsupported sorting rule 原因 : 指定されたソート規則名が無効か、またはサポートされていません。 処置 : 有効なソート規則名を選択してください。また、ソート規則名のリストは、 『Oracle Database グローバリゼーション・サポート・ガイド』を参照してください。 GDK-03002: The functional-driven sort is not supported. 原因 : ファンクションドリブン・ソート規則名が指定されました。 処置 : 有効なソート規則名を選択してください。また、ソート規則名のリストは、 『Oracle Database グローバリゼーション・サポート・ガイド』を参照してください。 GDK-03003: The linguistic data file is missing. 原因 : 有効なソート規則が指定されましたが、関連データ・ファイルが見つかりませ ん。 処置 : GDK の jar ファイルが Java アプリケーションに正しくインストールされている かどうかを確認してください。 Oracle Globalization Development Kit 8-47 GDK エラー・メッセージ GDK-03005: Binary sort is not available for the specified character set . 原因 : 指定されたキャラクタ・セットのバイナリ・ソートはサポートされていません。 処置 : バイナリ・ソートをサポートするキャラクタ・セットについては、 『Oracle Database グローバリゼーション・サポート・ガイド』を参照してください。 GDK-03006: The comparison strength level setting is invalid. 原因 : 無効な比較強度レベルが指定されました。 処置 : リストから有効な比較強度レベルである PRIMARY、SECONDARY または TERTIARY を選択してください。 GDK-03007: The composition level setting is invalid. 原因 : 無効な複合レベル設定が指定されました。 処置 : リストから有効な複合レベルとして NO_COMPOSITION または CANONICAL_ COMPOSITION を選択してください。 GDK-04001: Cannot map Oracle character to Unicode 原因 : プログラムは、Unicode にマップできない Oracle キャラクタ・セットの文字を 使用しようとしました。 処置 : 無効な文字に使用する別の例外ハンドラを記述するか、無効な文字を有効な置換 文字で置換できるように withReplacement メソッドをコールしてください。 GDK-04002: Cannot map Unicode to Oracle character 原因 : プログラムは、Oracle キャラクタ・セットの文字にマップできない Unicode 文 字を使用しようとしました。 処置 : 無効な文字に使用する別の例外ハンドラを記述するか、無効な文字を有効な置換 文字で置換できるように withReplacement メソッドをコールしてください。 GDK-05000: A literal in the date format is too large. 原因 : 日付書式で指定された文字列リテラルが長すぎます。 処置 : 日付書式には、より短い文字列リテラルを使用してください。 GDK-05001: The date format is too long for internal buffer. 原因 : 日付書式パターンが長すぎます。 処置 : より短い日付書式パターンを使用してください。 GDK-05002: The Julian date is out of range. 原因 : 無効な日付範囲が指定されました。 処置 : 日付が指定した範囲 0 ~ 3439760 内にあるかどうかを確認してください。 8-48 Oracle Database グローバリゼーション・サポート・ガイド GDK エラー・メッセージ GDK-05003: Failure in retrieving date/time 原因 : これは内部エラーです。 処置 : オラクル社カスタマ・サポート・センターに連絡してください。 GDK-05010: Duplicate format code found 原因 : 書式パターンに同じ書式コードが 2 回以上使用されています。 処置 : 重複する書式コードを削除してください。 GDK-05011: The Julian date precludes the use of the day of the year. 原因 : ユリウス日付と年の日付の両方が指定されました。 処置 : ユリウス日付または年の日付のどちらか一方を削除してください。 GDK-05012: The year may only be specified once. 原因 : 年の書式コードが 2 回以上指定されました。 処置 : 重複する年の書式コードを削除してください。 GDK-05013: The hour may only be specified once. 原因 : 時間の書式コードが 2 回以上指定されました。 処置 : 重複する時間書式コードを削除してください。 GDK-05014: The AM/PM conflicts with the use of A.M./P.M. 原因 : A.M./P.M. とともに AM/PM が指定されました。 処置 : AM/PM または A.M./P.M. のどちらか一方を使用します。両方を使用しないで ください。 GDK-05015: The BC/AD conflicts with the use of B.C./A.D. 原因 : B.C./A.D. とともに BC/AD が指定されました。 処置 : BC/AD または B.C./A.D. のどちらか一方を使用します。両方を使用しないでく ださい。 GDK-05016: Duplicate month found 原因 : 月の書式コードが 2 回以上指定されました。 処置 : 重複する月の書式コードを削除してください。 GDK-05017: The day of the week may only be specified once. 原因 : 曜日の書式コードが 2 回以上指定されました。 処置 : 重複する曜日の書式コードを削除してください。 Oracle Globalization Development Kit 8-49 GDK エラー・メッセージ GDK-05018: The HH24 precludes the use of meridian indicator. 原因 : 正午標識とともに HH24 が指定されました。 処置 : HH24 または正午標識付き HH12 のどちらか一方を使用します。 GDK-05019: The signed year precludes the use of BC/AD. 原因 : BC/AD とともに記号付きの年が指定されました。 処置 : 記号付きの年または記号なし BC/AD 付きの年のどちらか一方を使用してくださ い。 GDK-05020: A format code cannot appear in a date input format. 原因 : 日付入力書式に書式コードが使用されています。 処置 : 書式コードを削除してください。 GDK-05021: Date format not recognized 原因 : サポートされていない書式コードが指定されました。 処置 : 書式コードを修正してください。 GDK-05022: The era format code is not valid with this calendar. 原因 : カレンダに無効な元号の書式コードが指定されました。 処置 : 元号の書式コードを削除するか、元号をサポートする別のカレンダを使用してく ださい。 GDK-05030: The date format pattern ends before converting entire input string. 原因 : 不完全な日付書式パターンが指定されました。 処置 : 入力文字列全体を含むように書式パターンを書き換えてください。 GDK-05031: The year conflicts with the Julian date. 原因 : ユリウス日付に対して互換性のない年が指定されました。 処置 : ユリウス日付と年が矛盾しないかどうかを確認してください。 GDK-05032: The day of the year conflicts with the Julian date. 原因 : ユリウス日付に対して互換性のない年の日が指定されました。 処置 : ユリウス日付と年の日が矛盾しないかどうかを確認してください。 GDK-05033: The month conflicts with the Julian date. 原因 : ユリウス日付に対して互換性のない月が指定されました。 処置 : ユリウス日付と月が矛盾しないかどうかを確認してください。 8-50 Oracle Database グローバリゼーション・サポート・ガイド GDK エラー・メッセージ GDK-05034: The day of the month conflicts with the Julian date. 原因 : ユリウス日付に対して互換性のない月の日が指定されました。 処置 : ユリウス日付と月の日が矛盾しないかどうかを確認してください。 GDK-05035: The day of the week conflicts with the Julian date. 原因 : ユリウス日付に対して互換性のない曜日が指定されました。 処置 : ユリウス日付と曜日が矛盾しないかどうかを確認してください。 GDK-05036: The hour conflicts with the seconds in the day. 原因 : 指定された時間と日の秒数に互換性がありません。 処置 : 時間と日の秒数が矛盾しないかどうかを確認してください。 GDK-05037: The minutes of the hour conflicts with the seconds in the day. 原因 : 指定された時間の分数と日の秒数に互換性がありません。 処置 : 時間の分数と日の秒数が矛盾しないかどうかを確認してください。 GDK-05038: The seconds of the minute conflicts with the seconds in the day. 原因 : 指定された分の秒数と日の秒数に互換性がありません。 処置 : 分の秒数と日の秒数が矛盾しないかどうかを確認してください。 GDK-05039: Date not valid for the month specified 原因 : 月に対して無効な日付が指定されました。 処置 : 月の日付範囲を確認してください。 GDK-05040: Input value not long enough for the date format 原因 : 指定された書式コードが多すぎます。 処置 : 不要な書式コードを削除するか、より長い値を指定してください。 GDK-05041: A full year must be between -4713 and +9999, and not be 0. 原因 : 無効な年が指定されました。 処置 : 指定された範囲内の年を指定してください。 GDK-05042: A quarter must be between 1 and 4. 原因 : 無効な四半期が指定されました。 処置 : 四半期が指定の範囲内にあるかどうかを確認してください。 GDK-05043: Not a valid month 原因 : 無効な月が指定されました。 処置 : 月が 1 ~ 12 であるか、または有効な月名であるかどうかを確認してください。 Oracle Globalization Development Kit 8-51 GDK エラー・メッセージ GDK-05044: The week of the year must be between 1 and 52. 原因 : 年の無効な週が指定されました。 処置 : 年の週が指定の範囲内にあるかどうかを確認してください。 GDK-05045: The week of the month must be between 1 and 5. 原因 : 月の無効な週が指定されました。 処置 : 月の週が指定の範囲内にあるかどうかを確認してください。 GDK-05046: Not a valid day of the week 原因 : 無効な曜日が指定されました。 処置 : 曜日が 1 ~ 7 であるか、または有効な曜日名であるかどうかを確認してくださ い。 GDK-05047: A day of the month must be between 1 and the last day of the month. 原因 : 月の無効な日が指定されました。 処置 : 月の日が指定の範囲内にあるかどうかを確認してください。 GDK-05048: A day of year must be between 1 and 365 (366 for leap year). 原因 : 年の無効な日が指定されました。 処置 : 年の日が指定の範囲内にあるかどうかを確認してください。 GDK-05049: An hour must be between 1 and 12. 原因 : 無効な時間が指定されました。 処置 : 時間が指定の範囲内にあるかどうかを確認してください。 GDK-05050: An hour must be between 0 and 23. 原因 : 無効な時間が指定されました。 処置 : 時間が指定の範囲内にあるかどうかを確認してください。 GDK-05051: A minute must be between 0 and 59. 原因 : 無効な分が指定されました。 処置 : 分が指定の範囲内にあるかどうかを確認してください。 GDK-05052: A second must be between 0 and 59. 原因 : 無効な秒が指定されました。 処置 : 秒が指定の範囲内にあるかどうかを確認してください。 GDK-05053: A second in the day must be between 0 and 86399. 原因 : 日の無効な秒が指定されました。 処置 : 日の秒が指定の範囲内にあるかどうかを確認してください。 8-52 Oracle Database グローバリゼーション・サポート・ガイド GDK エラー・メッセージ GDK-05054: The Julian date must be between 1 and 5373484. 原因 : 無効なユリウス日付が指定されました。 処置 : ユリウス日付が指定の範囲内にあるかどうかを確認してください。 GDK-05055: Missing AM/A.M. or PM/P.M. 原因 : 書式パターンに AM/A.M. も PM/P.M. も指定されていません。 処置 : AM/A.M. または PM/P.M. を指定してください。 GDK-05056: Missing BC/B.C. or AD/A.D. 原因 : 書式パターンに BC/B.C. も AD/A.D. も指定されていません。 処置 : BC/B.C. または AD/A.D. を指定してください。 GDK-05057: Not a valid time zone 原因 : 無効なタイム・ゾーンが指定されました。 処置 : 有効なタイム・ゾーンを指定してください。 GDK-05058: Non-numeric character found 原因 : 数字が必要ですが、数字以外の文字が見つかりました。 処置 : 文字が数字かどうかを確認してください。 GDK-05059: Non-alphabetic character found 原因 : アルファベットが必要ですが、アルファベット以外の文字が見つかりました。 処置 : 文字がアルファベットかどうかを確認してください。 GDK-05060: The week of the year must be between 1 and 53. 原因 : 年の無効な週が指定されました。 処置 : 年の週が指定の範囲内にあるかどうかを確認してください。 GDK-05061: The literal does not match the format string. 原因 : 入力の文字列リテラルの長さが、書式パターンのリテラルと(先行の空白を除 き)異なります。 処置 : 書式パターンをリテラルにあわせて修正してください。FX 修飾子がオンになっ ている場合、リテラルは余分な空白なしで正確に一致する必要があります。 GDK-05062: The numeric value does not match the length of the format item. 原因 : 数値が書式項目の長さと一致しません。 処置 : 入力日付を修正するか、FX または FM 書式修飾子をオフにしてください。入力 日付に FX または FM 書式コードが指定されている場合、桁数は書式コードで指定され た数と正確に一致する必要があります。たとえば、9 は書式コード DD と一致しません が、09 は一致します。 Oracle Globalization Development Kit 8-53 GDK エラー・メッセージ GDK-05063: The year is not supported for the current calendar. 原因 : 現行のカレンダでサポートされない年が指定されました。 処置 : 現行のカレンダでサポートされる年については、 『Oracle Database グローバリ ゼーション・サポート・ガイド』で確認してください。 GDK-05064: The date is out of range for the calendar. 原因 : 指定された日付はカレンダの範囲外です。 処置 : カレンダで有効な日付を指定してください。 GDK-05065: Invalid era 原因 : 無効な元号が指定されました。 処置 : 元号が有効かどうかを確認してください。 GDK-05066: The datetime class is invalid. 原因 : これは内部エラーです。 処置 : オラクル社カスタマ・サポート・センターに連絡してください。 GDK-05067: The interval is invalid. 原因 : 無効な時間隔が指定されました。 処置 : 有効な時間隔を指定してください。 GDK-05068: The leading precision of the interval is too small. 原因 : 時間隔に指定された先行精度が小さすぎて、時間隔を格納できません。 処置 : 時間隔の先行精度を大きくするか、小さい先行精度を使用して時間隔を指定して ください。 GDK-05069: Reserved for future use 原因 : 予約済。 処置 : 予約済。 GDK-05070: The specified intervals and datetimes were not mutually comparable. 原因 : 指定された時間隔と日時には相互の互換性がありません。 処置 : 相互に互換性のある時間隔または日時のペアを指定してください。 GDK-05071: The number of seconds must be less than 60. 原因 : 60 以上の秒数が指定されました。 処置 : 秒数には 59 以下の値を指定してください。 8-54 Oracle Database グローバリゼーション・サポート・ガイド GDK エラー・メッセージ GDK-05072: Reserved for future use 原因 : 予約済。 処置 : 予約済。 GDK-05073: The leading precision of the interval was too small. 原因 : 時間隔に指定された先行精度が小さすぎて、時間隔を格納できません。 処置 : 時間隔の先行精度を大きくするか、小さい先行精度を使用して時間隔を指定して ください。 GDK-05074: An invalid time zone hour was specified. 原因 : タイム・ゾーンの時間は -12 ~ 13 である必要があります。 処置 : -12 ~ 13 の範囲内でタイム・ゾーンの時間を指定してください。 GDK-05075: An invalid time zone minute was specified. 原因 : タイム・ゾーンの分は 0 ~ 59 である必要があります。 処置 : 0 ~ 59 の範囲内でタイム・ゾーンの分を指定してください。 GDK-05076: An invalid year was specified. 原因 : 年は -4713 以上である必要があります。 処置 : -4713 以上の年を指定してください。 GDK-05077: The string is too long for the internal buffer. 原因 : これは内部エラーです。 処置 : オラクル社カスタマ・サポート・センターに連絡してください。 GDK-05078: The specified field was not found in the datetime or interval. 原因 : 指定されたフィールドが日時または時間隔内で見つかりませんでした。 処置 : 指定したフィールドが日時または時間隔内にあるかどうかを確認してください。 GDK-05079: An invalid hh25 field was specified. 原因 : hh25 フィールドは 0 ~ 24 である必要があります。 処置 : 0 ~ 24 の範囲内で hh25 フィールドを指定してください。 GDK-05080: An invalid fractional second was specified. 原因 : 小数秒は 0 ~ 999999999 である必要があります。 処置 : 0 ~ 999999999 の範囲内で小数秒の値を指定してください。 GDK-05081: An invalid time zone region ID was specified. 原因 : 指定されたタイム・ゾーン地域 ID は無効です。 処置 : オラクル社カスタマ・サポート・センターに連絡してください。 Oracle Globalization Development Kit 8-55 GDK エラー・メッセージ GDK-05082: Time zone region name not found 原因 : 指定された地域名が見つかりません。 処置 : オラクル社カスタマ・サポート・センターに連絡してください。 GDK-05083: Reserved for future use 原因 : 予約済。 処置 : 予約済。 GDK-05084: Internal formatting error 原因 : これは内部エラーです。 処置 : オラクル社カスタマ・サポート・センターに連絡してください。 GDK-05085: Invalid object type 原因 : 無効なオブジェクト型が指定されました。 処置 : サポートされているオブジェクト型を使用してください。 GDK-05086: Invalid date format style 原因 : 無効な書式スタイルが指定されました。 処置 : 有効な書式スタイルを選択してください。 GDK-05087: A null format pattern was specified. 原因 : NULL の書式パターンは指定できません。 処置 : 有効な書式パターンを指定してください。 GDK-05088: Invalid number format model 原因 : 無効な数値書式コードが指定されました。 処置 : 数値書式コードを修正してください。 GDK-05089: Invalid number 原因 : 無効な数が指定されました。 処置 : 入力を修正してください。 GDK-05090: Reserved for future use 原因 : 予約済。 処置 : 予約済。 GDK-0509: Datetime/interval internal error 原因 : これは内部エラーです。 処置 : オラクル社カスタマ・サポート・センターに連絡してください。 8-56 Oracle Database グローバリゼーション・サポート・ガイド GDK エラー・メッセージ GDK-05098: Too many precision specifiers 原因 : プログラムは日付を切捨てまたは丸めようとしましたが、日付書式パターンに余 分なデータが見つかりました。 処置 : 日付書式パターンの構文を確認してください。 GDK-05099: Bad precision specifier 原因 : 無効な精度指定子が指定されました。 処置 : 有効な精度指定子を使用してください。 GDK-05200: Missing WE8ISO8859P1 data file 原因 : WE8ISO8859P1 のキャラクタ・セット・データファイルがインストールされてい ません。 処置 : GDK の jar ファイルが Java アプリケーションに正しくインストールされている かどうかを確認してください。 GDK-05201: Failed to convert to a hexadecimal value 原因 : HTML/XML データに無効な 16 進文字列が含まれていました。 処置 : 文字列に &x[0-9A-Fa-f]+; 形式の 16 進値が含まれているかどうかを確認してくだ さい。 GDK-05202: Failed to convert to a decimal value 原因 : HTML/XML データに無効な 10 進文字列が見つかりました。 処置 : 文字列に &[0-9]+; 形式の 10 進値が含まれているかどうかを確認してください。 GDK-05203: Unregistered character entity 原因 : HTML/XML データに無効な文字エンティティが見つかりました。 処置 : HTML/XML データに有効な文字エンティティを使用してください。登録済の文 字エンティティについては、HTML/XML 規格を参照してください。 GDK-05204: Invalid Quoted-Printable value 原因 : データに無効な Quoted-Printable データが見つかりました。 処置 : 入力データが正しい Quoted-Printable 形式でエンコードされているかどうかを確 認してください。 GDK-05205: Invalid MIME header format 原因 : 無効な MIME ヘッダー形式が指定されました。 処置 : MIME ヘッダー形式については RFC 2047 を参照してください。入力データがそ の形式に準拠しているかどうかを確認してください。 Oracle Globalization Development Kit 8-57 GDK エラー・メッセージ GDK-05206: Invalid numeric string 原因 : URL のデコード中に %FF 形式の無効な文字が見つかりました。 処置 : 入力の URL 文字列が有効で、正しくエンコードされているかどうかを確認して ください。%FF は有効な 16 進数にする必要があります。 GDK-05207: Invalid class of the object, key, in the user-defined locale to charset mapping" 原因 : ユーザー定義ロケールからキャラクタ・セットへのマッピング表で、key オブ ジェクトのクラスが java.util.Locale ではありません。 処置 : ユーザー定義ロケールからキャラクタ・セットへのマッピング表について Map オブジェクトを構成するときには、key オブジェクト用に java.util.Locale を指定してく ださい。 GDK-05208: Invalid class of the object, value, in the user-defined locale to charset mapping 原因 : ユーザー定義ロケールからキャラクタ・セットへのマッピング表で、value オブ ジェクトのクラスが java.lang.String ではありません。 処置 : ユーザー定義ロケールからキャラクタ・セットへのマッピング表について Map オブジェクトを構成するときには、value オブジェクト用に java.lang.String を指定して ください。 GDK-05209: Invalid rewrite rule 原因 : 書換え規則で照合パターンに対して無効な正規表現が指定されました。 処置 : 書換え規則の照合パターンに有効な正規表現を使用しているかどうかを確認して ください。 GDK-05210: Invalid character set 原因 : 無効なキャラクタ・セット名が指定されました。 処置 : 有効なキャラクタ・セット名を指定してください。 GDK-0521: Default locale not defined as a supported locale 原因 : デフォルトのアプリケーション・ロケールがサポート対象ロケールのリストにあ りません。 処置 : デフォルトのアプリケーション・ロケールをサポート対象ロケールのリストに組 み込むか、またはデフォルト・ロケールをリストにあるロケールに変更してください。 GDK-05212: The rewriting rule must be a String array with three elements. 原因 : 書換え規則パラメータが、3 つの要素からなる文字列配列ではありません。 処置 : 書換え規則パラメータが 3 つの要素からなる文字列配列であるかどうかを確認し てください。第 1 の要素は正規表現での照合パターンを表し、第 2 の要素は JavaDoc of ServletHelper.rewriteURL で指定されている形式の結果パターンを表します。第 3 の要 素は、ロケール代替操作が実行されるかどうかを指定するブール値 True または False を 表します。 8-58 Oracle Database グローバリゼーション・サポート・ガイド GDK エラー・メッセージ GDK-05213: Invalid type for the class of the object, key, in the user-defined parameter name mapping 原因 : ユーザー定義パラメータ名のマッピング表で、key オブジェクトのクラスが java.lang.String ではありません。 処置 : ユーザー定義パラメータ名のマッピング表について Map オブジェクトを構成す るときには、key オブジェクト用に java.lang.String を指定してください。 GDK-05214: The class of the object, value, in the user-defined parameter name mapping, must be of type ¥"java.lang.String¥". 原因 : ユーザー定義パラメータ名のマッピング表で、value オブジェクトのクラスが java.lang.String ではありません。 処置 : ユーザー定義パラメータ名のマッピング表について Map オブジェクトを構成す るときには、value オブジェクト用に java.lang.String を指定してください。 GDK-05215: Parameter name must be in the form [a-z][a-z0-9]*. 原因 : パラメータ名に無効な文字が含まれています。 処置 : パラメータ名が [a-z][a-z0-9]* 形式であるかどうかを確認してください。 GDK-05216: The attribute ¥"var¥" must be specified if the attribute ¥"scope¥" is set. 原因 : タグには "scope" 属性が設定されていますが、"var" 属性が指定されていません。 処置 : 変数名を表す "var" 属性を指定してください。 GDK-05217: The ¥"param¥" tag must be nested inside a ¥"message¥" tag. 原因 : "param" タグが "message" タグ内にネストされていません。 処置 : "param" タグが "message" タグで囲まれているかどうかを確認してください。 GDK-05218: Invalid ¥"scope¥" attribute is specified. 原因 : 無効な "scope" 値が指定されました。 処置 : 有効な有効範囲として "application"、"session"、"request" または "page" を指定 してください。 GDK-05219: Invalid date format style 原因 : 指定された日付書式スタイルは無効です。 処置 : 有効な日付書式スタイルとして "default"、"short" または "long" を指定してくだ さい。 GDK-05220: No corresponding Oracle character set exists for the IANA character set. 原因 : サポートされていない IANA キャラクタ・セット名が指定されました。 処置 : 対応する Oracle キャラクタ・セットがある IANA キャラクタ・セットを指定し てください。 Oracle Globalization Development Kit 8-59 GDK エラー・メッセージ GDK-05221: Invalid parameter name 原因 : ユーザー定義パラメータのマッピング表で、無効なパラメータ名が指定されまし た。 処置 : 指定したパラメータ名がサポートされているかどうかを確認してください。サ ポートされているパラメータ名のリストを取得するには、 LocaleSource.Parameter.toArray をコールします。 GDK-05222: Invalid type for the class of the object, key, in the user-defined message bundle mapping. 原因 : ユーザー定義メッセージ・バンドルのマッピング表で、key オブジェクトのクラ スが java.lang.String ではありません。 処置 : ユーザー定義メッセージ・バンドルのマッピング表について Map オブジェクト を構成するときには、key オブジェクト用に java.lang.String を指定してください。 GDK-05223: Invalid type for the class of the object, value, in the user-defined message bundle mapping 原因 : ユーザー定義メッセージ・バンドルのマッピング表で、value オブジェクトのク ラスが java.lang.String ではありません。 処置 : ユーザー定義メッセージ・バンドルのマッピング表について Map オブジェクト を構成するときには、value オブジェクト用に java.lang.String を指定してください。 GDK-05224: Invalid locale string 原因 : GDK アプリケーション構成ファイルで指定された ISO ロケール名に、無効な文 字が含まれています。 処置 : ISO ロケール名に有効な文字のみが使用されているかどうかを確認してくださ い。標準的な名前の書式では、ISO 639 の言語と ISO 3166 の国をハイフンでつなぎま す。たとえば、米国では en-US を使用して米英語のロケールを指定します。 GDK-06001: LCSDetector profile not available 原因 : 指定されたプロファイルが見つかりません。 処置 : GDK の jar ファイルが Java アプリケーションに正しくインストールされている かどうかを確認してください。 GDK-06002: Invalid IANA character set name or no corresponding Oracle name found 原因 : 指定された IANA キャラクタ・セットが無効か、または対応する Oracle キャラ クタ・セットがありません。 処置 : IANA キャラクタ・セットが有効かどうかと、対応する Oracle キャラクタ・ セットがあるかどうかを確認してください。 8-60 Oracle Database グローバリゼーション・サポート・ガイド GDK エラー・メッセージ GDK-06003: Invalid ISO language name or no corresponding Oracle name found 原因 : 指定された ISO 言語が無効か、または対応する Oracle の言語がありません。 処置 : 指定した ISO 言語が無効かどうか、または対応する Oracle の言語がないかどう かを確認してください。 GDK-06004: A character set filter and a language filter cannot be set at the same time. 原因 : LCSDetector オブジェクトでキャラクタ・セット・フィルタと言語フィルタが同 時に設定されています。 処置 : キャラクタ・セットまたは言語のどちらか一方のみを設定してください。 GDK-06005: Reset is necessary before LCSDetector can work with a different data source. 原因 : LCSDetector オブジェクトに異なる型のデータ・ソースが使用される前に、reset メソッドが起動されていません。 処置 : LCSDetector.reset をコールして Detector をリセットしてから、他の型のデータ・ ソースの検出に切り替えてください。 ORA-17154: Cannot map Oracle character to Unicode 原因 : Oracle の文字が無効または不完全で、Unicode 値にマップできません。 処置 : 無効な文字に使用する別の例外ハンドラを記述するか、無効な文字を有効な置換 文字で置換できるように withReplacement メソッドをコールしてください。 ORA-17155: Cannot map Unicode to Oracle character 原因 : Unicode 文字に対応する文字が Oracle キャラクタ・セットにありません。 処置 : 無効な文字に使用する別の例外ハンドラを記述するか、無効な文字を有効な置換 文字で置換できるように withReplacement メソッドをコールしてください。 Oracle Globalization Development Kit 8-61 GDK エラー・メッセージ 8-62 Oracle Database グローバリゼーション・サポート・ガイド 9 グローバル環境での SQL と PL/SQL の プログラミング この章では、グローバリゼーション・サポート環境での SQL プログラミングに役立つ情報 について説明します。この章の内容は、次のとおりです。 ■ オプションの NLS パラメータを伴うロケール依存の SQL 関数 ■ ロケール依存のその他の SQL 関数 ■ グローバル環境での SQL と PL/SQL のプログラミングに関するその他のトピック グローバル環境での SQL と PL/SQL のプログラミング 9-1 オプションの NLS パラメータを伴うロケール依存の SQL 関数 オプションの NLS パラメータを伴うロケール依存の SQL 関数 動作をグローバリゼーション・サポートの規則に依存しているすべての SQL 関数で、NLS パラメータを指定できます。これらの関数は、次のとおりです。 TO_CHAR TO_DATE TO_NUMBER NLS_UPPER NLS_LOWER NLS_INITCAP NLSSORT これらの関数の NLS パラメータを明示的に指定すると、セッションの NLS パラメータに依 存せずに関数を評価できます。この機能は、数字や日付が文字列リテラルとして含まれてい る SQL 文で重要となる場合があります。 たとえば、次の問合せは、日付に対する言語が AMERICAN に指定されている場合、正しく評 価されます。 SELECT last_name FROM employees WHERE hire_date > '01-JAN-1999'; このような問合せを現行の日付言語に依存しないようにするには、次のような文を使用しま す。 SELECT last_name FROM employees WHERE hire_date > TO_DATE('01-JAN-1999','DD-MON-YYYY', 'NLS_DATE_LANGUAGE = AMERICAN'); このようにして、セッションの言語に依存しない SQL 文を、必要に応じて定義できます。 文字列リテラルが、ビュー、CHECK 制約またはトリガー内の SQL 文にある場合には、この ような文の指定が必要となる場合があります。 注意 : ロケール依存の SQL 関数でオプションの NLS パラメータを明示 的に指定する必要があるのは、セッションの NLS パラメータ値に依存さ せないことが必要となる SQL 文のみです。通常、SQL 関数で NLS パラ メータにセッションのデフォルト値を使用するほうが、パフォーマンスが 改善されます。 9-2 Oracle Database グローバリゼーション・サポート・ガイド オプションの NLS パラメータを伴うロケール依存の SQL 関数 すべての文字関数は、シングルバイトとマルチバイトの両方の文字をサポートします。単位 を明示的に示した場合を除いて、文字関数は、バイト単位ではなく文字単位で動作します。 これ以降の内容は、次のとおりです。 ■ SQL 関数の NLS パラメータのデフォルト値 ■ SQL 関数の NLS パラメータの指定 ■ SQL 関数で受け入れられない NLS パラメータ SQL 関数の NLS パラメータのデフォルト値 SQL 関数でビューやトリガーが評価される場合、NLS 関数パラメータには現行のセッショ ンからのデフォルト値が使用されます。SQL 関数で CHECK 制約が評価される場合は、デー タベースの作成時に NLS パラメータに指定されたデフォルト値が使用されます。 SQL 関数の NLS パラメータの指定 NLS パラメータは、SQL 関数で次のように指定できます。 'parameter = value' 次に例を示します。 'NLS_DATE_LANGUAGE = AMERICAN' SQL 関数では、次の NLS パラメータを指定できます。 NLS_DATE_LANGUAGE NLS_NUMERIC_CHARACTERS NLS_CURRENCY NLS_ISO_CURRENCY NLS_DUAL_CURRENCY NLS_CALENDAR NLS_SORT グローバル環境での SQL と PL/SQL のプログラミング 9-3 オプションの NLS パラメータを伴うロケール依存の SQL 関数 表 9-1 に、特定の SQL 関数に有効な NLS パラメータを示します。 表 9-1 SQL 関数と有効な NLS パラメータ SQL 関数 有効な NLS パラメータ TO_DATE NLS_DATE_LANGUAGE NLS_CALENDAR TO_NUMBER NLS_NUMERIC_CHARACTERS NLS_CURRENCY NLS_DUAL_CURRENCY NLS_ISO_CURRENCY TO_CHAR NLS_DATE_LANGUAGE NLS_NUMERIC_CHARACTERS NLS_CURRENCY NLS_ISO_CURRENCY NLS_DUAL_CURRENCY NLS_CALENDAR TO_NCHAR NLS_DATE_LANGUAGE NLS_NUMERIC_CHARACTERS NLS_CURRENCY NLS_ISO_CURRENCY NLS_DUAL_CURRENCY NLS_CALENDAR NLS_UPPER NLS_SORT NLS_LOWER NLS_SORT NLS_INITCAP NLS_SORT NLSSORT NLS_SORT 次の例に、SQL 関数で NLS パラメータを使用する方法を示します。 TO_DATE ('1-JAN-99', 'DD-MON-YY', 'nls_date_language = American') TO_CHAR (hire_date, 'DD/MON/YYYY', 'nls_date_language = French') TO_CHAR (SYSDATE, 'DD/MON/YYYY', 'nls_date_language=''Traditional Chinese'' ') TO_NUMBER ('13.000,00', '99G999D99', 'nls_numeric_characters = '',.''') TO_CHAR (salary, '9G999D99L', 'nls_numeric_characters = '',.'' nls_currency = ''EUR''') 9-4 Oracle Database グローバリゼーション・サポート・ガイド オプションの NLS パラメータを伴うロケール依存の SQL 関数 TO_CHAR (salary, '9G999D99C', 'nls_numeric_characters = ''.,'' nls_iso_currency = Japan') NLS_UPPER (last_name, 'nls_sort = Swiss') NLSSORT (last_name, 'nls_sort = German') 注意 : 一部の言語では、様々な小文字が複数の大文字に、またはその逆 に対応する場合もあります。その結果、NLS_UPPER、NLS_LOWER および NLS_INITCAP 関数の出力の長さが入力の長さと異なる場合があります。 関連項目 : 字」 5-12 ページ「特殊な大文字」および 5-12 ページ「特殊な小文 SQL 関数で受け入れられない NLS パラメータ 次の NLS パラメータは、NLSSORT を除く SQL 関数では受け入れられません。 ■ NLS_LANGUAGE ■ NLS_TERRITORY ■ NLS_DATE_FORMAT NLS_DATE_FORMAT および NLS_TERRITORY_FORMAT は、必要な書式マスクを妨げる可能 性があるため、パラメータとしては受け入れられません。TO_CHAR 関数または TO_DATE 関 数に NLS パラメータがある場合は、常に、日付書式を指定する必要があります。このため、 NLS_DATE_FORMAT および NLS_TERRITORY_FORMAT は、TO_CHAR または TO_DATE 関数 に対する有効な NLS パラメータではありません。TO_CHAR または TO_DATE 関数で NLS_DATE_FORMAT または NLS_TERRITORY_FORMAT を指定すると、エラーが戻されます。 NLS_LANGUAGE は NLS_DATE_LANGUAGE のセッション値を妨げる可能性があります。たと えば、TO_CHAR 関数で NLS_LANGUAGE を指定した場合、その値が NLS_DATE_LANGUAGE のセッション値と異なっていれば無視されます。 グローバル環境での SQL と PL/SQL のプログラミング 9-5 ロケール依存のその他の SQL 関数 ロケール依存のその他の SQL 関数 この項の内容は、次のとおりです。 ■ CONVERT 関数 ■ 様々な長さセマンティクスに使用する SQL 関数 ■ 様々な長さセマンティクスに使用する LIKE 条件 ■ キャラクタ・セットの SQL 関数 ■ NLSSORT 関数 CONVERT 関数 CONVERT 関数は、キャラクタ・セット間で文字データを変換します。 CONVERT 関数は、あるキャラクタ・セットの文字列のバイナリ表現を別のキャラクタ・ セットのバイナリ表現に変換します。この関数は、データベースとクライアントの間のキャ ラクタ・セット変換と同じ方法を使用します。したがって、この関数では置換文字を使用す るため、同じ制限があります。 関連項目 : 2-16 ページ「クライアントとサーバーの間のキャラクタ・ セット変換」 CONVERT の構文は、次のとおりです。 CONVERT(char, dest_char_set[, source_char_set]) char は変換される値、source_char_set は変換元キャラクタ・セット、dest_char_ set は変換先キャラクタ・セットです。source_char_set パラメータが指定されていない 場合は、デフォルト値としてデータベース・キャラクタ・セットが使用されます。 関連項目 : ■ ■ CONVERT 関数の詳細は、 『Oracle Database SQL リファレンス』を参照 してください。 CONVERT 関数にのみ使用されるキャラクタ・セット・エンコーディン グについては、A-21 ページの「キャラクタ・セット変換のサポート」 を参照してください。 9-6 Oracle Database グローバリゼーション・サポート・ガイド ロケール依存のその他の SQL 関数 様々な長さセマンティクスに使用する SQL 関数 Oracle には、様々な長さセマンティクスに従って動作する SQL 関数が用意されています。 この種の SQL 関数は、SUBSTR、LENGTH および INSTR という 3 つのグループに分かれて います。グループ内の各関数は異なる種類の長さセマンティクスに基づいており、関数名に 追加される文字または数字で区別されます。たとえば、SUBSTRB はバイト・セマンティク スに基づいています。 SUBSTR 関数は、サブストリングの要求された部分を戻します。LENGTH 関数は、文字列の 長さを戻します。INSTR 関数は、文字列内のサブストリングを検索します。 SUBSTR 関数は、文字列の長さを様々な方法で計算します。表 9-2 に、計算方法を示します。 表 9-2 SUBSTR 関数による文字列の長さの計算方法 関数 計算方法 SUBSTR 文字列の長さを、データ型のキャラクタ・セットに関連付けられた長さセマンティクスに基づい て、文字数単位で計算します。たとえば、AL32UTF8 の文字は、UCS-4 文字の数で計算されます。 UTF8 および AL16UTF16 の文字は、UCS-2 文字の数で計算されます。1 つの補助文字は、 AL32UTF8 では 1 文字、UTF8 および AL16UTF16 では 2 文字としてカウントされます。VARCHAR および NVARCHAR では異なるキャラクタ・セットが使用されている場合があるため、2 つの文字列 が同一の場合にも、データ型が異なると SUBSTR での結果が異なる可能性があります。アプリケー ションで一貫性が必要な場合は、 SUBSTR2 または SUBSTR4 を使用して、すべてのセマンティクス の計算を強制的にそれぞれ UCS-2 または UCS-4 にしてください。 SUBSTRB 文字列の長さをバイト数単位で計算します。 SUBSTR2 文字列の長さを、Java 文字列と Windows クライアント環境に準拠する UCS-2 文字の数で計算しま す。各文字は、UCS-2 または 16 ビット Unicode 値で表されます。補助文字は 2 文字としてカウン トされます。 SUBSTR4 文字列の長さを UCS-4 文字数で計算します。各文字は、UCS-4 または 32 ビット Unicode 値で表さ れます。補助文字は 1 文字としてカウントされます。 SUBSTRC 文字列の長さを Unicode 合成文字数で計算します。補助文字と合成文字は、1 文字としてカウント されます。 LENGTH および INSTR 関数は、関数名に追加された文字または数字に従って、文字列の長 さを同様の方法で計算します。 次に、データベース・キャラクタ・セットが AL32UTF8 のデータベースで、SUBSTR と SUBSTRB を実行した場合の相違がわかる例を示します。 グローバル環境での SQL と PL/SQL のプログラミング 9-7 ロケール依存のその他の SQL 関数 Fußball 文字列の場合、次の文では 2 文字目からの長さ 4 文字のサブストリングが戻され ます。 SELECT SUBSTR ('Fußball', 2 , 4) SUBSTR FROM dual; SUBS ---ußba Fußball 文字列の場合、次の文では 2 バイト目からの長さ 4 バイトのサブストリングが戻 されます。 SELECT SUBSTRB ('Fußball', 2 , 4) SUBSTRB FROM dual; SUB --ußb 関連項目 : SUBSTR、LENGTH および INSTR 関数の詳細は、 『Oracle Database SQL リファレンス』を参照してください。 様々な長さセマンティクスに使用する LIKE 条件 LIKE 条件によって、パターン一致を使用するテストを指定します。等価演算子(=)は、あ る文字の値と別の文字の値を完全に照合しますが、LIKE 条件は、1 番目の値の中に 2 番目 で指定されたパターンがあるかどうかを検索し、ある文字の値と別の文字の値の一部を照合 します。 LIKE では、入力のキャラクタ・セットに関連付けられた長さセマンティクスを使用して、 文字列の長さが文字数単位で計算されます。表 9-3 に、LIKE2、LIKE4 および LIKEC の各 条件を示します。 表 9-3 LIKE 条件 関数 説明 LIKE2 文字が UCS-2 のセマンティクスで表される場合に使用します。補助文字は 2 文字と みなされます。 LIKE4 文字が UCS-4 のセマンティクスで表される場合に使用します。補助文字は 1 文字と みなされます。 LIKEC 文字が完全な Unicode キャラクタ・セマンティクスで表される場合に使用します。 合成文字は 1 文字として処理されます。 LIKEB 条件はありません。 9-8 Oracle Database グローバリゼーション・サポート・ガイド ロケール依存のその他の SQL 関数 キャラクタ・セットの SQL 関数 2 つの SQL 関数 NLS_CHARSET_NAME および NLS_CHARSET_ID で、キャラクタ・セット ID 番号とキャラクタ・セット名の間の変換ができます。これらの関数は、OCI を介して変数 をバインドするために、キャラクタ・セット ID 番号の判断が必要なプログラムで使用され ます。 もう 1 つの SQL 関数 NLS_CHARSET_DECL_LEN は、NCHAR 列の長さを戻します。 この項の内容は、次のとおりです。 ■ キャラクタ・セット番号からキャラクタ・セット名への変換 ■ キャラクタ・セット名からキャラクタ・セット番号への変換 ■ NCHAR 列の長さを戻す 関連項目 : 『Oracle Database SQL リファレンス』 キャラクタ・セット番号からキャラクタ・セット名への変換 NLS_CHARSET_NAME(n) 関数は、ID 番号 n に対応するキャラクタ・セットの名前を戻しま す。n がキャラクタ・セット ID として認識されない値である場合、関数は NULL を戻しま す。 キャラクタ・セット名からキャラクタ・セット番号への変換 NLS_CHARSET_ID(text) は、text によって指定された名前に対応するキャラクタ・セッ ト ID を戻します。text には、ランタイム VARCHAR2 の値としてキャラクタ・セット名が 定義されます。text の値は、データベース・キャラクタ・セットや各国語キャラクタ・ セット以外のキャラクタ・セットに変換される NLSRTL 名とすることができます。 値 CHAR_CS を text に入力すると、この関数はサーバーのデータベース・キャラクタ・ セット ID を戻します。値 NCHAR_CS を text に入力すると、この関数はサーバーの各国語 キャラクタ・セット ID を戻します。text が名前として認識されない場合、この関数は NULL を戻します。 注意 : text の値は、大文字で入力してください。 NCHAR 列の長さを戻す NLS_CHARSET_DECL_LEN(BYTECNT、CSID) は、列の宣言の長さを文字数で戻します。 BYTECNT は列のバイト単位の長さです。CSID は列のキャラクタ・セット ID です。 グローバル環境での SQL と PL/SQL のプログラミング 9-9 ロケール依存のその他の SQL 関数 NLSSORT 関数 NLSSORT 関数では、ORDER BY 句に言語ソートを使用できます。文字列は言語ソート・メ カニズムで使用される等価のソート文字列で置換されるため、置換文字列をソートして必要 なソート基準を生成できます。バイナリ・ソートの場合、ソート文字列は入力文字列と同じ です。 ORDER BY 句で使用される言語ソートの種類は NLS_SORT セッション・パラメータによっ て決定されますが、NLSSORT 関数を明示的に使用することでオーバーライドできます。 例 9-1 では、NLS_SORT セッション・パラメータを使用してドイツ語ソートを指定していま す。 例 9-1 NLS_SORT セッション・パラメータを使用したドイツ語ソートの指定 ALTER SESSION SET NLS_SORT = GERMAN; SELECT * FROM table1 ORDER BY column1; 例 9-2 NLSSORT 関数を使用したフランス語ソートの指定 この例では、最初に NLS_SORT セッション・パラメータを GERMAN に設定しますが、 NLSSORT 関数でフランス語ソートを指定することでオーバーライドします。 ALTER SESSION SET NLS_SORT = GERMAN; SELECT * FROM table1 ORDER BY NLSSORT(column1, 'NLS_SORT=FRENCH'); WHERE 句では、デフォルトで言語上の比較ではなくバイナリ比較が使用されますが、これは WHERE 句に NLSSORT 関数を使用してオーバーライドできます。 例 9-3 WHERE 句を使用した言語上の比較 ALTER SESSION SET NLS_COMP = ANSI; SELECT * FROM table1 WHERE NLSSORT(column1, 'NLS_SORT=FRENCH')> NLSSORT(column2, 'NLS_SORT=FRENCH'); NLS_COMP セッション・パラメータを ANSI に設定すると、WHERE 句には NLS_SORT 値が 使用されます。 これ以降の内容は、次のとおりです。 ■ NLSSORT の構文 ■ WHERE 句の文字列の比較 ■ NLS_COMP パラメータを使用した WHERE 句での比較の簡素化 ■ ORDER BY 句の制御 9-10 Oracle Database グローバリゼーション・サポート・ガイド ロケール依存のその他の SQL 関数 NLSSORT の構文 NLSSORT は、次の 4 通りの方法で使用できます。 ■ NLSSORT()(NLS_SORT パラメータに従います。 ) ■ NLSSORT(column1, 'NLS_SORT=xxxx') ■ NLSSORT(column1, 'NLS_LANG=xxxx') ■ NLSSORT(column1, 'NLS_LANGUAGE=xxxx') NLSSORT 関数の NLS_LANG パラメータは、クライアント環境設定の NLS_LANG とは異なり ます。NLSSORT 関数では、NLS_LANG によって言語の略称(米語は US、ポーランド語は PL など)が指定されます。次に例を示します。 SELECT * FROM table1 ORDER BY NLSSORT(column1, 'NLS_LANG=PL'); WHERE 句の文字列の比較 NLSSORT によって、アプリケーションは、アルファベットの規則に従った文字列の一致を 実行できます。通常、WHERE 句の文字列は、文字のバイナリ値を使用して比較されます。 データベース・キャラクタ・セットでのバイナリ値が大きい場合、その文字は他の文字より も大きいとみなされます。文字のバイナリ値に基づいた文字順が言語のアルファベット順と 一致しない場合があるため、このような比較では、アルファベットの規則に従わないことが あります。たとえば、列 (column1) に ISO 8859-1 の 8 ビット・キャラクタ・セットの値 ABC、ABZ、BCD および ÄBC が含まれている場合、Ä の数値は B より大きいため、次の問 合せでは BCD と ÄBC の両方が戻されます。 SELECT column1 FROM table1 WHERE column1 > 'B'; Ä は、ドイツ語ではアルファベット順で B の前にソートされますが、スウェーデン語では Z の後にソートされます。ドイツ語では WHERE 句で NLSSORT を使用すると、次のように言語 上の比較を行うことができます。 WHERE NLSSORT(col) comparison_operator NLSSORT(comparison_string) NLSSORT は、比較演算子の両側に指定する必要があります。次に例を示します。 SELECT column1 FROM table1 WHERE NLSSORT(column1) > NLSSORT('B'); ドイツ語の言語ソートを設定していると、この文では Ä で始まる文字列は戻されません。こ れは、ドイツ語では、アルファベット順で Ä は B より前になるためです。スウェーデン語の 言語ソートを設定していると、Ä で始まる文字列が戻されます。これは、スウェーデン語で は、アルファベット順で Ä は Z より後になるためです。 グローバル環境での SQL と PL/SQL のプログラミング 9-11 ロケール依存のその他の SQL 関数 NLS_COMP パラメータを使用した WHERE 句での比較の簡素化 デフォルトでは、WHERE 句または PL/SQL ブロックでの比較はバイナリで行われます。言 語上の比較に NLSSORT 関数を使用するのは、特に NLS_SORT セッション・パラメータにす でに言語ソートが指定されている場合は、面倒な場合があります。NLS_COMP パラメータを 使用すると、WHERE 句または PL/SQL ブロックでの比較に、NLS_SORT セッション・パラ メータに従った言語を使用するように指定できます。 注意 : NLS_COMP パラメータは、パーティション表に対する比較動作に は影響しません。VALUES LESS THAN パーティションに基づく文字列の 比較は、常にバイナリで行われます。 関連項目 : 3-44 ページ「NLS_COMP」 ORDER BY 句の制御 言語ソートを使用中の場合、ORDER BY 句では文字データに対して暗黙的な NLSSORT が使 用されます。ORDER BY 句のソート方法(言語またはバイナリ)は、アプリケーション側で 意識することはありません。ただし、NLSSORT 関数が ORDER BY 句に明示的に指定されて いる場合、暗黙的な NLSSORT は実行されません。 NLS_SORT セッション・パラメータで言語ソートが定義されている場合、アプリケーション では ORDER BY 句に暗黙的な NLSSORT 関数が使用されます。明示的な NLSSORT 関数を指 定すると、暗黙的な NLSSORT 関数がオーバーライドされます。 ソート方法が言語として定義されている場合、通常、ORDER BY 句に NLSSORT 関数は不要 です。 ソート方法がデフォルトであるか、バイナリとして定義されている場合、次のような問合せ ではバイナリ・ソートが使用されます。 SELECT last_name FROM employees ORDER BY last_name; 次の問合せによって、ドイツ語の言語ソートを取得できます。 SELECT last_name FROM employees ORDER BY NLSSORT(last_name, 'NLS_SORT = GERMAN'); 関連項目 : 5-3 ページ「言語ソートの使用」 9-12 Oracle Database グローバリゼーション・サポート・ガイド グローバル環境での SQL と PL/SQL のプログラミングに関するその他のトピック グローバル環境での SQL と PL/SQL のプログラミングに関する その他のトピック この項の内容は、次のとおりです。 ■ SQL の日付書式マスク ■ 週番号の計算 ■ SQL の数値書式マスク ■ LOB 列への外部 BFILE データのロード 関連項目 : 書式マスクの詳細は、『Oracle Database SQL リファレンス』 を参照してください。 SQL の日付書式マスク TO_CHAR、TO_DATE および TO_NUMBER 関数とともに複数の書式マスクが用意されていま す。 RM(Roman Month)書式要素は、ローマ数字で月を戻します。RM または rm を使用して、 大文字または小文字を指定できます。たとえば、1998 年 9 月 7 日の場合、DD-rm-YYYY で は 07-ix-1998 が戻り、DD-RM-YYYY では 07-IX-1998 が戻ります。 書式マスク MON および DY は、長さ 3 文字以内の月および曜日の略称を明示的にサポートし ます。たとえば、フランス語の Lundi と Mardi に対して、それぞれの略称 Lu と Ma を指定 できます。 週番号の計算 WW 書式マスクで戻される週番号は、アルゴリズム int(dayOfYear+6)/7 に従って算出さ れます。この週番号のアルゴリズムは、ISO 規格(2015、1992-06-15)に従っていません。 ISO 規格をサポートするために、IW 書式要素が用意されています。この書式要素は ISO 週 番号を戻します。また、Y、YY、YYY および YYYY の各書式要素の動作と同等の書式要素 I、 IY、IYY および IYYY は、ISO 週番号に関連する年を戻します。 ISO 規格では、ISO 週番号に関連する年が、暦年と異なることがあります。たとえば、1988 年 1 月 1 日は、1987 年の ISO 週番号 53 になります。週は、常に月曜日に始まって日曜日に 終わります。週番号は、次の規則に従って決定されます。 ■ ■ 1 月 1 日が金曜日、土曜日または日曜日の場合、1 月 1 日を含む週は、その週の大半の日 が前年に属するため、前年の最後の週になります。 1 月 1 日が月曜日、火曜日、水曜日または木曜日の場合は、1 月 1 日を含む週は、その週 の大半の日が新しい年に属するため、新しい年の最初の週になります。 グローバル環境での SQL と PL/SQL のプログラミング 9-13 グローバル環境での SQL と PL/SQL のプログラミングに関するその他のトピック たとえば、1991 年 1 月 1 日は火曜日であるため、1990 年 12 月 31 日の月曜日から 1991 年 1 月 6 日の日曜日までが第 1 週になります。したがって、1990 年 12 月 31 日の ISO 週番号お よび年は、1 および 1991 となります。ISO 週番号を取得するには、週番号に IW 書式マスク を使用し、年に IY 書式のいずれかを使用します。 SQL の数値書式マスク 数値を書式設定するための書式要素がいくつか用意されています。 要素 説明 用途 D Decimal 小数点文字を戻します。 G Group グループ・セパレータを戻します。 L Local currency 各国通貨記号を戻します。 C International currency ISO 通貨記号を戻します。 RN Roman numeral 数値を同等のローマ数字として戻します。 ローマ数字の場合は、RN または rn を使用して、大文字または小文字のいずれかを指定でき ます。変換される数値は、1 ~ 3999 の範囲の整数であることが必要です。 LOB 列への外部 BFILE データのロード DBMS_LOB PL/SQL パッケージを使用すると、外部 BFILE データを LOB 列にロードできま す。以前のリリースの Oracle では、バイナリ・データを CLOB 列または NCLOB 列にロード する前のキャラクタ・セット変換は実行されませんでした。そのため、正常に動作させるに は、BFILE データをデータベース・キャラクタ・セットまたは各国語キャラクタ・セットと 同じキャラクタ・セットにする必要がありました。Oracle9i リリース 2(9.2)で導入された API では、新規パラメータを使用して BFILE データのキャラクタ・セット ID を指定できま す。各 API によって、指定した BFILE キャラクタ・セットから、CLOB データ型の場合は データベース・キャラクタ・セット、NCLOB データ型の場合は各国語キャラクタ・セットへ とデータが変換されます。クライアント上では BFILE データはサポートされないため、 ロードはサーバー上で発生します。 ■ ■ BLOB 列をロードするには、DBMS_LOB.LOADBLOBFROMFILE を使用します。 CLOB 列および NCLOB 列をロードするには、DBMS_LOB.LOADCLOBFROMFILE を使用し ます。 9-14 Oracle Database グローバリゼーション・サポート・ガイド グローバル環境での SQL と PL/SQL のプログラミングに関するその他のトピック 関連項目 : ■ ■ 『PL/SQL パッケージ・プロシージャおよびタイプ・リファレンス』 『Oracle Database アプリケーション開発者ガイド - ラージ・オブジェ クト』 グローバル環境での SQL と PL/SQL のプログラミング 9-15 グローバル環境での SQL と PL/SQL のプログラミングに関するその他のトピック 9-16 Oracle Database グローバリゼーション・サポート・ガイド 10 グローバル環境での OCI プログラミング この章では、グローバル環境での OCI プログラミングについて説明します。この章の内容 は、次のとおりです。 ■ OCI NLS 関数の使用 ■ OCI でのキャラクタ・セットの指定 ■ OCI でのロケール情報の取得 ■ Oracle と他の規格とのロケール情報のマッピング ■ OCI での文字列操作 ■ OCI での文字の分類 ■ OCI でのキャラクタ・セットの変換 ■ OCI メッセージ関数 ■ lmsgen ユーティリティ グローバル環境での OCI プログラミング 10-1 OCI NLS 関数の使用 OCI NLS 関数の使用 多くの OCI NLS 関数では、次のいずれかを受け入れます。 ■ 環境ハンドル ■ ユーザー・セッション・ハンドル OCI 環境ハンドルは、クライアント NLS 環境に関連付けられており、クライアント NLS 環 境変数によって初期化されます。サーバーに対して ALTER SESSION 文が使用されても、こ の環境は変わりません。環境ハンドルに関連付けられているキャラクタ・セットは、クライ アント・キャラクタ・セットです。 OCI セッション・ハンドルは、サーバー・セッション環境に関連付けられています。ALTER SESSION 文よってセッション環境が変更されると、この NLS 設定も変更されます。セッ ション・ハンドルに関連付けられているキャラクタ・セットは、データベース・キャラク タ・セットです。 OCI セッション・ハンドルは、そのセッションで最初のトランザクションが始まるまで、ど の NLS 設定とも関連付けられていません。SELECT 文では、トランザクションは始まりませ ん。 関連項目 : OCI NLS 関数の詳細は、 『Oracle Call Interface プログラマー ズ・ガイド』を参照してください。 OCI でのキャラクタ・セットの指定 OCI 環境の作成時に OCIEnvNlsCreate 関数を使用して、クライアント側データベースと 各国語キャラクタ・セットを指定します。この関数を使用すると、NLS_LANG および NLS_NCHAR 初期化パラメータの設定に関係なく、アプリケーションでキャラクタ・セット 情報を動的に設定できます。また、1 つのアプリケーションで、同じサーバー環境内で異な るクライアント環境に使用する複数の環境ハンドラを初期化できます。 AL16UTF16 を除く Oracle キャラクタ・セット ID を指定するには、OCIEnvNlsCreate 関 数を通じてメタデータ、SQL CHAR データおよび SQL NCHAR データのエンコーディングを 指定します。UTF-16 データを指定するには、OCIEnvNlsCreate 関数で OCI_UTF16ID を 使用します。 関連項目 : OCIEnvNlsCreate 関数の詳細は、『Oracle Call Interface プ ログラマーズ・ガイド』を参照してください。 10-2 Oracle Database グローバリゼーション・サポート・ガイド OCI でのロケール情報の取得 OCI でのロケール情報の取得 Oracle のロケールは、言語、地域およびキャラクタ・セットの定義で構成されています。ロ ケールによって、日付、時刻、数字および通貨の書式と、曜日名、月名などの規則が定義さ れます。国際化されたアプリケーションは、ユーザーのロケール設定と文化的な慣習に従っ て動作します。たとえば、ロケールがドイツ語に設定されている場合、曜日名と月名はドイ ツ語で表示されます。 OCINlsGetInfo() 関数を使用すると、次のロケール情報を取得できます。 曜日(変換後) 曜日の略称(変換後) 月名(変換後) 月の略称(変換後) Yes/No(変換後) AM/PM(変換後) AD/BC(変換後) 数値書式 借方 / 貸方 日付書式 通貨書式 デフォルトの言語 デフォルトの地域 デフォルトのキャラクタ・セット デフォルトの言語ソート デフォルトのカレンダ 表 10-1 に、ロケール情報を戻す OCI 関数を示します。 表 10-1 ロケール情報を戻す OCI 関数 関数 説明 OCINlsGetInfo() ロケール情報を戻します。前述の説明を参照してください。 OCINlsCharSetNameTold() 指定された Oracle キャラクタ・セット名の Oracle キャラクタ・セット ID を戻します。 OCINlsCharSetIdToName() 指定されたキャラクタ・セット ID の Oracle キャラクタ・セット名を 戻します。 OCINlsNumericInfoGet() 最大文字サイズなど、指定された数値情報を戻します。 OCINlsEnvironmentVariableGet() NLS_LANG からのキャラクタ・セット ID、または NLS_NCHAR からの 各国語キャラクタ・セット ID を戻します。 関連項目 : 『Oracle Call Interface プログラマーズ・ガイド』 グローバル環境での OCI プログラミング 10-3 Oracle と他の規格とのロケール情報のマッピング Oracle と他の規格とのロケール情報のマッピング OCINlsNameMap 関数は、Oracle キャラクタ・セット名、言語名および地域名と、Internet Assigned Numbers Authority (IANA)名および国際標準化機構(ISO)名の間のマッピン グを行います。 OCI での文字列操作 文字列操作では、次の 2 種類のデータ構造がサポートされています。 ■ ネイティブ・キャラクタ文字列 ■ ワイド・キャラクタ文字列 ネイティブ・キャラクタ文字列は、Oracle のネイティブ・キャラクタ・セットでエンコード されます。ネイティブ・キャラクタ文字列を処理する関数は、その文字列の長さをバイト単 位で計算して 1 単位として扱います。ワイド・キャラクタ(wchar)文字列関数は、文字列 操作の柔軟性を高めます。この種の関数は、文字列の長さを文字数で計算し、文字ベースと 文字列ベースの操作をサポートします。 ワイド・キャラクタのデータ型は Oracle 固有のデータ型です。ANSI/ISO の C 規格で定義 されている wchar_t データ型と混同しないでください。Oracle のワイド・キャラクタの データ型は、すべてのプラットフォームで常に 4 バイトですが、wchar_t のサイズは、実 装とプラットフォームに依存します。Oracle のワイド・キャラクタのデータ型によって、ネ イティブ・キャラクタは簡単に処理できる固定幅になるように正規化されます。これによ り、Oracle のワイド・キャラクタ形式とネイティブ・キャラクタ形式の間でラウンドトリッ プ変換時にデータ消失が発生しないことが保証されます。 文字列操作は、次のように分類できます。 ■ ネイティブ・キャラクタ形式とワイド・キャラクタ形式間の文字列の変換 ■ 文字の分類 ■ 大 / 小文字の変換 ■ 表示長の計算 ■ 比較、連結、検索などの一般的な文字列操作 表 10-2 に、OCI 文字列操作関数を示します。 注意 : 表 10-2 では、マルチバイト文字列に言及している関数と説明はネ イティブ・キャラクタ文字列に適用されます。 10-4 Oracle Database グローバリゼーション・サポート・ガイド OCI での文字列操作 表 10-2 OCI 文字列操作関数 関数 説明 OCIMultiByteToWideChar() ヌル文字で終了する文字列全体を wchar 書式に変換します。 OCIMultiByteInSizeToWideChar() 文字列の一部を wchar 書式に変換します。 OCIWideCharToMultiByte() ヌル文字で終了するワイド・キャラクタ文字列全体をマルチバイト文字列 に変換します。 OCIWideCharInSizeToMultiByte() ワイド・キャラクタ文字列の一部をマルチバイト書式に変換します。 OCIWideCharToLower() wc で指定された wchar 文字を、指定したロケールに存在する場合は対応 する小文字に変換します。対応する小文字が存在しない場合は、wc 自体を 戻します。 OCIWideCharToUpper() wc で指定された wchar 文字を、指定したロケールに存在する場合は対応 する大文字に変換します。対応する大文字が存在しない場合は、wc 自体を 戻します。 OCIWideCharStrcmp() 2 つのワイド・キャラクタ文字列を、バイナリ、言語または大 / 小文字を 区別しない比較方法で比較します。 OCIWideCharStrncmp() この関数は OCIWideCharStrcmp() に似ています。2 つのワイド・キャラ クタ文字列を、バイナリ、言語または大 / 小文字を区別しない比較方法で 比較します。str1 から最大 len1 バイト、str2 から最大 len2 バイトが 比較されます。 OCIWideCharStrcat() wsrcstr で示された文字列のコピーを追加します。その後、結果文字列の 文字数を戻します。 OCIWideCharStrncat() wsrcstr で示された文字列のコピーを追加します。その後、結果文字列の 文字数を戻します。最大 n 文字が追加されます。 OCIWideCharStrchr() wstr で示された文字列の中で、最初に出現する wc を検索します。検索が 正常終了した場合は、wchar へのポインタを戻します。 OCIWideCharStrrchr() wstr で示された文字列の中で、最後に出現する wc を検索します。 OCIWideCharStrcpy() wsrcstr で示された wchar 文字列を wdststr で示された配列にコピーし ます。その後、コピーされた文字数を戻します。 OCIWideCharStrncpy() wsrcstr で示された wchar 文字列を wdststr で示された配列にコピーし ます。その後、コピーされた文字数を戻します。最大 n 文字が配列からコ ピーされます。 OCIWideCharStrlen() wstr で示された wchar 文字列にある文字数を計算し、その数を戻します。 OCIWideCharStrCaseConversion() wsrcstr で示されたワイド・キャラクタ文字列をフラグの指定により大文 字または小文字に変換し、その結果を wdststr で示された配列にコピーし ます。 OCIWideCharDisplayLength() wc を表示するために必要な列位置の数を決定します。 OCIWideCharMultibyteLength() wc をマルチバイト・エンコーディングで表す場合に必要なバイト数を決定 します。 グローバル環境での OCI プログラミング 10-5 OCI での文字列操作 表 10-2 OCI 文字列操作関数(続き) 関数 説明 OCIMultiByteStrcmp() 2 つのマルチバイト・キャラクタ文字列を、バイナリ、言語または大 / 小 文字を区別しない比較方法で比較します。 OCIMultiByteStrncmp() 2 つのマルチバイト・キャラクタ文字列を、バイナリ、言語または大 / 小 文字を区別しない比較方法で比較します。str1 から最大 len1 バイト、 str2 から最大 len2 バイトが比較されます。 OCIMultiByteStrcat() srcstr で示されたマルチバイト文字列のコピーを追加します。 OCIMultiByteStrncat() srcstr で示されたマルチバイト文字列のコピーを追加します。srcstr か ら最大 n バイトが dststr に追加されます。 OCIMultiByteStrcpy() srcstr で示されたマルチバイト文字列を dststr で示された配列にコ ピーします。その後、コピーされたバイト数を戻します。 OCIMultiByteStrncpy() srcstr で示されたマルチバイト文字列を dststr で示された配列にコ ピーします。その後、コピーされたバイト数を戻します。srcstr で示さ れた配列から最大 n バイトが、dststr で示された配列にコピーされます。 OCIMultiByteStrlen() str で示されたマルチバイト文字列のバイト数を戻します。 OCIMultiByteStrnDisplayLength() n バイトの範囲内のすべての文字が占有する表示位置の大きさを戻します。 OCIMultiByteStrCaseConversion() 文字列の一部をあるキャラクタ・セットから別のキャラクタ・セットに変 換します。 関連項目 : 『Oracle Call Interface プログラマーズ・ガイド』 10-6 Oracle Database グローバリゼーション・サポート・ガイド OCI での文字の分類 OCI での文字の分類 表 10-3 に、OCI の文字の分類関数を示します。 表 10-3 OCI の文字の分類関数 関数 説明 OCIWideCharIsAlnum() ワイド・キャラクタが、アルファベット文字であるか 10 進数字であるかをテスト します。 OCIWideCharIsAlpha() ワイド・キャラクタが、アルファベット文字であるかどうかをテストします。 OCIWideCharIsCntrl() ワイド・キャラクタが、制御文字であるかどうかをテストします。 OCIWideCharIsDigit() ワイド・キャラクタが、10 進数字であるかどうかをテストします。 OCIWideCharIsGraph() ワイド・キャラクタが、図形文字であるかどうかをテストします。 OCIWideCharIsLower() ワイド・キャラクタが、小文字であるかどうかをテストします。 OCIWideCharIsPrint() ワイド・キャラクタが、印字可能文字であるかどうかをテストします。 OCIWideCharIsPunct() ワイド・キャラクタが、句読点文字であるかどうかをテストします。 OCIWideCharIsSpace() ワイド・キャラクタが、スペース文字であるかどうかをテストします。 OCIWideCharIsUpper() ワイド・キャラクタが、大文字であるかどうかをテストします。 OCIWideCharIsXdigit() ワイド・キャラクタが、16 進数字であるかどうかをテストします。 OCIWideCharIsSingleByte() wc がマルチバイトに変換されるとき、シングルバイト文字であるかどうかをテスト します。 関連項目 : 『Oracle Call Interface プログラマーズ・ガイド』 グローバル環境での OCI プログラミング 10-7 OCI でのキャラクタ・セットの変換 OCI でのキャラクタ・セットの変換 Oracle キャラクタ・セットと Unicode(16 ビットの固定幅 Unicode エンコーディング)間 の変換がサポートされています。Unicode から Oracle キャラクタ・セットへのマッピング がない場合は、置換文字が使用されます。したがって、データ消失なしで元のキャラクタ・ セットへ戻る変換が常に可能なわけではありません。 表 10-4 に、OCI のキャラクタ・セット変換関数を示します。 表 10-4 OCI キャラクタ・セット変換関数 関数 説明 OCICharsetToUnicode() src で示されたマルチバイト文字列を Unicode に変換し、 dst で示された配列に格納します。 OCIUnicodeToCharset() src で示された Unicode 文字列をマルチバイトに変換し、 dst で示された配列に格納します。 OCINlsCharSetConvert() 文字列をあるキャラクタ・セットから別のキャラクタ・セッ トに変換します。 OCICharSetConversionIsReplacementUsed() OCINlsCharSetConvert() または OCIUnicodeToCharSet() の最後の起動時に変換できなかっ た文字に、置換文字が使用されたかどうかを示します。 関連項目 : ■ ■ 『Oracle Call Interface プログラマーズ・ガイド』 7-14 ページ「Unicode を使用した OCI プログラミング」 10-8 Oracle Database グローバリゼーション・サポート・ガイド lmsgen ユーティリティ OCI メッセージ関数 ユーザー・メッセージ API には、カートリッジ開発者のための簡易インタフェースが用意さ れています。これによって、Oracle メッセージと同様にユーザー自身のメッセージを取り出 すことができます。 表 10-5 に、OCI メッセージ関数を示します。 表 10-5 OCI メッセージ関数 関数 説明 OCIMessageOpen() hndl で示された言語で、メッセージ・ハンドルをオープンします。 OCIMessageGet() msgno で識別されるメッセージ番号の付いたメッセージを取り出します。バッ ファが 0(ゼロ)でない場合、この関数は msgbuf で指定されたバッファに メッセージをコピーします。 OCIMessageClose() msgh で示されたメッセージ・ハンドルをクローズし、そのハンドルに関連付 けられているメモリーをすべて解放します。 関連項目 : 『Oracle Data Cartridge 開発者ガイド』 lmsgen ユーティリティ 用途 lmsgen ユーティリティは、テキスト・ベースのメッセージ・ファイル(.msg)をバイナリ 形式(.msb)に変換します。これにより、ユーザーが提供する Oracle メッセージと OCI メッセージを、必要な言語で OCI 関数に戻すことができます。 構文 LMSGEN text_file product facility [language] text_file は、メッセージ・テキスト・ファイルです。 product は、製品名です。 facility は、機能名です。 language は、NLS_LANG パラメータで指定した言語に対応するオプションのメッセージ言 語です。language パラメータは、メッセージ・ファイルが言語に正しくタグ付けされていな い場合に必要です。 グローバル環境での OCI プログラミング 10-9 lmsgen ユーティリティ テキスト・メッセージ・ファイル テキスト・メッセージ・ファイルは、次のガイドラインに従う必要があります。 ■ / および // で始まる行は内部コメントとして扱われ、無視されます。 ■ メッセージ・ファイルを特定の言語でタグ付けするには、次のような 1 行を追加します。 # ■ CHARACTER_SET_NAME= Japanese_Japan.JA16EUC 各メッセージには、次の 3 つのフィールドがあります。 message_number, warning_level, message_text message_number は、メッセージ・ファイル内で一意であることが必要です。 warning_level は、現在使用されていません。0(ゼロ)を使用してください。 message_text は、511 バイトを超えることはできません。 次に、Oracle メッセージ・テキスト・ファイルの例を示します。 / Copyright (c) 2001 by the Oracle Corporation. All rights reserved. / This is a test us7ascii message file # CHARACTER_SET_NAME= american_america.us7ascii / 00000, 00000, "Export terminated unsuccessfully¥n" 00003, 00000, "no storage definition found for segment(%lu, %lu)" 例 : テキスト・メッセージ・ファイルからのバイナリ・メッセージ・ファイル の作成 次の表に、lmsgen パラメータのサンプル値を示します。 パラメータ 値 product $HOME/myApplication facility imp language AMERICAN text_file impus.msg テキスト・メッセージ・ファイルは、次の場所にあります。 $HOME/myApp/mesg/impus.msg テキスト・メッセージ・ファイル内の 1 行は、次のとおりです。 00128,2, "Duplicate entry %s found in %s" 10-10 Oracle Database グローバリゼーション・サポート・ガイド lmsgen ユーティリティ lmsgen ユーティリティは、テキスト・メッセージ・ファイル(impus.msg)をバイナリ形 式のファイル impus.msb に変換します。 % lmsgen impus.msg $HOME/myApplication imp AMERICAN 出力は次のようになります。 Generating message file impus.msg --> /home/scott/myApplication/mesg/impus.msb NLS Binary Message File Generation Utility: Version 10.1.0.0.0 -Production Copyright (c) Oracle Corporation 1979, 2003. CORE 10.1.0.0.0 All rights reserved. Production グローバル環境での OCI プログラミング 10-11 lmsgen ユーティリティ 10-12 Oracle Database グローバリゼーション・サポート・ガイド 11 キャラクタ・セットの移行 この章では、キャラクタ・セット変換とキャラクタ・セットの移行について説明します。こ の章の内容は、次のとおりです。 ■ キャラクタ・セットの移行の概要 ■ 既存のデータベースのデータベース・キャラクタ・セットの変更 ■ NCHAR データ型への移行 ■ キャラクタ・セット移行後にデータベース・スキーマをリカバリするタスク キャラクタ・セットの移行 11-1 キャラクタ・セットの移行の概要 キャラクタ・セットの移行の概要 使用しているデータベースに適切なキャラクタ・セットを選択することは、重要な決定事項 です。データベース・キャラクタ・セットの選択時には、次の要因を考慮する必要がありま す。 ■ 格納する必要があるデータの型 ■ データベースで現在および将来対応する必要のある言語 ■ 各キャラクタ・セットの異なるサイズ要件とその要件がパフォーマンスに与える影響 関連項目として、既存のデータベース用の新規キャラクタ・セットの選択があります。既存 のデータベース用のデータベース・キャラクタ・セットを変更することを、キャラクタ・ キャラクタ・ セットの移行と呼びます。データベース・キャラクタ・セット間で移行する場合は、適切な セットの移行 キャラクタ・セットを選択する必要があります。また、次の原因によるデータ消失を最小限 に抑えるように計画してください。 ■ データの切捨て ■ キャラクタ・セット変換の問題 関連項目 : 第 2 章「キャラクタ・セットの選択」 データの切捨て データベースがバイト・セマンティクスを使用して作成されている場合、CHAR および VARCHAR2 データ型のサイズは、文字単位ではなくバイト単位で指定されます。たとえば、 表定義で CHAR(20) と指定すると、文字データを格納するために 20 バイトが割り当てられ ます。データベース・キャラクタ・セットでシングルバイト文字コード体系が使用されてい る場合は、文字数がバイト数と同じであるため、文字の格納時にデータ消失は発生しませ ん。データベース・キャラクタ・セットでマルチバイト・キャラクタ・セットが使用されて いる場合は、1 文字が 1 バイト以上で構成される場合があるため、バイト数は文字数とは異 なります。 新規キャラクタ・セットへの移行時には、既存の CHAR および VARCHAR2 列の列幅を検証す ることが重要です。これは、マルチバイトを格納する必要があるエンコーディングをサポー トするために、列幅の拡張が必要となる場合があるためです。変換によってデータが拡張さ れると、データが切り捨てられる可能性があります。 表 11-1 に、変換を通じてシングルバイト文字がマルチバイト文字になる場合のデータ拡張例 を示します。 11-2 Oracle Database グローバリゼーション・サポート・ガイド キャラクタ・セットの移行の概要 表 11-1 シングルバイトとマルチバイトのエンコーディング 文字 WE8MSWIN 1252 エンコーディング AL32UTF8 エンコーディング ä E4 C3 A4 ö F6 C3 B6 © A9 C2 A9 € 80 E2 82 AC 表 11-1 の 1 列目は選択した文字、2 列目は WE8MSWIN1252 キャラクタ・セットでの文字の 16 進表現、3 列目は AL32UTF8 キャラクタ・セットでの各文字の 16 進表現を示します。文 字と数字のペアは、それぞれ 1 バイトを表します。たとえば、ä(ウムラウト付きの a)は、 WE8MSWIN1252 ではシングルバイト文字(E4)ですが、AL32UTF8 ではダブルバイト文字 (C3 A4)となります。また、ユーロ記号のエンコーディングは 1 バイト(80)から 3 バイ ト(E2 82 AC)に拡張されます。 新しいキャラクタ・セットのデータにデータ型でサポートされるバイト・サイズより大きい 記憶域が必要な場合は、スキーマを変更する必要があります。CLOB 列の使用が必要になる 場合もあります。 関連項目 : 2-11 ページ「長さセマンティクス」 データの切捨てによって生じるその他の問題 データの切捨てによって次の問題が発生する可能性があります。 ■ ■ データベース・データ・ディクショナリ内でのスキーマ・オブジェクト名は、30 バイト を超えることはできません。スキーマ・オブジェクト名が新規データベース・キャラク タ・セットで 30 バイトを超える場合は、そのオブジェクト名を改名する必要がありま す。たとえば、タイ語の各国語キャラクタ・セットではタイ語 1 文字に 1 バイト必要で す。一方、AL32UTF8 では 3 バイト必要です。タイ語 11 文字の名前を持つ表を定義し ている場合、データベース・キャラクタ・セットを AL32UTF8 に変更するときは、この 表名を 10 文字以下に短縮する必要があります。 既存の Oracle ユーザー名またはパスワードが文字ベースで作成されており、その内容が 変換先のキャラクタ・セットでサイズ変更された場合、新規キャラクタ・セットへの移 行後は認証がエラーとなるため、ユーザーのログイン時に問題が発生します。この問題 が発生するのは、データ・ディクショナリに格納されている暗号化されたユーザー名と パスワードを、新規キャラクタ・セットへの移行時に更新できないためです。たとえ ば、現行のデータベース・キャラクタ・セットが WE8MSWIN1252 で、変換先のデータ ベース・キャラクタ・セットが AL32UTF8 の場合、ユーザー名 scött(ウムラウト付 きの o)の長さは 5 バイトから 6 バイトに変更されます。AL32UTF8 では、ユーザー名 が異なるため、scött はログインできなくなります。ユーザー名とパスワードには ASCII 文字を使用することをお薦めします。ASCII 文字以外の場合は、新規キャラク キャラクタ・セットの移行 11-3 キャラクタ・セットの移行の概要 タ・セットへの移行後に、影響のあるユーザー名とパスワードを再設定する必要があり ます。 注意 : データ・ディクショナリに暗号化された状態で格納されている ユーザー名およびパスワードは、ALTER DATABASE メソッドを使用して 移行すると更新されませんが、Import Utility および Export Utility を使用 して移行すると更新されます。 ■ CHAR データに、新規キャラクタ・セットへの移行後に拡張される文字が含まれている 場合、デフォルトでは、データベースのエクスポート時に空白埋込みは削除されませ ん。つまり、これらの行は、新規キャラクタ・セットでデータベースにインポートされ るときに拒否されます。これを回避するには、CHAR データをインポートする前に BLANK_TRIMMING 初期化パラメータを TRUE に設定します。 関連項目 : BLANK_TRIMMING 初期化パラメータの詳細は、『Oracle Database リファレンス』を参照してください。 キャラクタ・セット変換の問題 この項の内容は、次のとおりです。 ■ エクスポート・ユーティリティとインポート・ユーティリティの使用による置換文字 ■ クライアントの NLS_LANG パラメータ設定が不適切であるために生じる無効なデータ エクスポート・ユーティリティとインポート・ユーティリティの使用に よる置換文字 エクスポート・ユーティリティとインポート・ユーティリティでは、オリジナルのデータ ベース・キャラクタ・セットから新規データベース・キャラクタ・セットに変換できます。 ただし、キャラクタ・セット変換によって、データが消失したり、破損する可能性がありま す。たとえば、キャラクタ・セット A からキャラクタ・セット B に移行する場合に、変換先 キャラクタ・セット B はキャラクタ・セット A のスーパーセットであることが必要です。変 換先キャラクタ・セット B がスーパーセット スーパーセットであるのは、キャラクタ・セット A に定義さ スーパーセット れているすべての文字が含まれている場合です。キャラクタ・セット B で使用できない文字 は、置換文字に変換されます。この置換文字は、通常、?、¿ または使用不可能な文字に関連 する 1 文字として指定されます。たとえば、ä(ウムラウト付きの a)は、WE8MSWIN1252 ではシングルバイト文字(E4)ですが、AL32UTF8 ではダブルバイト文字(C3 A4)となり ます。置換文字は、変換先キャラクタ・セットで定義されます。 11-4 Oracle Database グローバリゼーション・サポート・ガイド キャラクタ・セットの移行の概要 注意 : 変換先キャラクタ・セット B は、キャラクタ・セット A のスー パーセットであることが必要です。ただし、データに含まれているキャラ クタ・セット A の文字がすべてキャラクタ・セット B にもあれば、変換 先キャラクタ・セットにキャラクタ・セット A のスーパーセットを使用し なくても、データの消失や破損は回避されます。 図 11-1 に、著作権記号とユーロ記号が ? に変換され、ä が a に変換されるキャラクタ・セッ ト変換の例を示します。 図 11-1 キャラクタ・セット変換での置換文字 データ消失のリスクを削減するには、類似する文字レパートリを持つキャラクタ・セットを 変換先に選択してください。AL32UTF8 には既存のキャラクタ・セットのほとんどの文字が 含まれているため、Unicode への移行は考慮に値する選択肢です。 クライアントの NLS_LANG パラメータ設定が不適切であるために生じる 無効なデータ データ消失の可能性があるキャラクタ・セット移行の使用例として、無効なデータを含む データベースの移行が考えられます。通常は、NLS_LANG パラメータがクライアント上で適 切に設定されていないために、データベースに無効なデータが発生します。NLS_LANG 値に は、クライアント・オペレーティング・システムのコード・ページを反映させる必要があり ます。たとえば、英語版 Windows 環境では、コード・ページは WE8MSWIN1252 です。 NLS_LANG パラメータを適切に設定すると、データベースはクライアント・オペレーティン グ・システムからのデータを自動的に変換できます。NLS_LANG パラメータが適切に設定さ れていないと、データベースに入ってくるデータは適切に変換されません。たとえば、デー タベース・キャラクタ・セットが AL32UTF8 で、クライアントが英語版 Windows オペレー ティング・システムで、クライアント上での NLS_LANG 設定が AL32UTF8 であるとします。 キャラクタ・セットの移行 11-5 キャラクタ・セットの移行の概要 データベースに入ってくるデータは WE8MSWIN1252 でエンコードされており、クライアン ト上の NLS_LANG 設定がデータベース・キャラクタ・セットと一致するため、AL32UTF8 データには変換されません。そのため、Oracle では変換は不要であるとみなされ、データ ベースに無効なデータが入力されます。 この結果、データの非一貫性の問題が 2 つ発生する可能性があります。一方の問題が発生す るのは、データベースに含まれているデータのキャラクタ・セットがデータベース・キャラ クタ・セットとは異なっているが、両方のキャラクタ・セットに同じコード・ポイントが存 在する場合です。たとえば、データベース・キャラクタ・セットが WE8ISO8859P1 で、中国 語版 Windows NT クライアントの NLS_LANG 設定が SIMPLIFIED CHINESE_ CHINA.WE8ISO8859P1 の場合、(ZHS16GBK キャラクタ・セットの)すべてのマルチバイ トの中国語データは、シングルバイト WE8ISO8859P1 データのペアとして格納されます。 これは、Oracle ではこれらの文字がシングルバイト WE8ISO8859P1 文字として扱われるこ とを意味します。そのため、SUBSTR や LENGTH などの SQL 文字列操作関数はすべて、文 字ではなくバイトを基準にして処理されます。ZHS16GBK データを構成するすべてのバイ トは、有効な WE8ISO8859P1 コードです。このようなデータベースを AL32UTF8 などの別 のキャラクタ・セットに移行する場合、文字コードは、WE8ISO8859P1 内の文字コードと同 様に変換されます。このように、ZHS16GBK 文字の 2 バイトはそれぞれ個別に変換され、 AL32UTF8 では意味のない値になります。図 11-2 は、この不適切なキャラクタ・セット置 換の例です。 図 11-2 不適切なキャラクタ・セットの置換 2 つ目の問題は、混在するキャラクタ・セットのデータがデータベースにある場合です。た とえば、データ・キャラクタ・セットが WE8MSWIN1252 で、ドイツ語とギリシャ語を使用 している 2 つの別々の Windows クライアントがともに、NLS_LANG キャラクタ・セットと して WE8MSWIN1252 を使用している場合、データベースにはドイツ語とギリシャ語の文字 が混在することになります。図 11-3 は、異なるクライアントが、同一データベースの異なる キャラクタ・セットを使用する方法を示しています。 11-6 Oracle Database グローバリゼーション・サポート・ガイド キャラクタ・セットの移行の概要 図 11-3 キャラクタ・セットの混在 データベース・キャラクタ・セットの移行を適切に行うには、この 2 つの状況の場合、手作 業による調整が必要です。これは、Oracle では格納されているデータのキャラクタ・セット を判断できないためです。不適切なデータ変換はデータを破損する恐れがあるため、新規 キャラクタ・セットにデータを移行する前に、データベース全体のバックアップを作成しま す。 キャラクタ・セットの移行 11-7 既存のデータベースのデータベース・キャラクタ・セットの変更 既存のデータベースのデータベース・キャラクタ・セットの変更 データベース・キャラクタ・セットの移行には、データ・スキャニングとデータ変換という 2 つの段階があります。データベース・キャラクタ・セットを変更する前に、考えられる データベース・キャラクタ・セット変換の問題とデータの切捨てを識別する必要がありま す。このステップはデータ・スキャニング データ・スキャニングと呼ばれます。 データ・スキャニング データ・スキャニングによって、データベース・キャラクタ・セットの変更前に、データを 新しい文字コード体系に移行するために必要な作業量が識別されます。データ・スキャニン グ時に検出される例には、列幅の拡張が必要なスキーマ・オブジェクトの数や、変換先の文 字レパートリに存在しないデータの分布などがあります。この情報は、データベース・キャ ラクタ・セットの最適な変換方法の決定に役立ちます。 不適切なデータ変換はデータを破損する恐れがあるため、新規キャラクタ・セットにデータ を移行する前に、データベース全体のバックアップを作成します。 データベース・キャラクタ・セットから別のデータベース・キャラクタ・セットにデータを 変換するには、3 通りの方法があります。ただし、そのデータベースには、11-4 ページの 「キャラクタ・セット変換の問題」で説明した非一貫性がないことが前提です。このような 非一貫性があるデータベースを移行する方法は、ここでは説明しません。詳細は、オラクル 社カスタマ・サポート・センターにお問い合せください。 この項の内容は、次のとおりです。 ■ 全体エクスポートおよび全体インポートを使用した文字データの移行 ■ CSALTER スクリプトを使用したキャラクタ・セットの移行 ■ CSALTER スクリプトと選択式のインポートを使用した文字データの移行 関連項目 : データ・スキャニングの詳細は、第 12 章「Character Set Scanner ユーティリティ」を参照してください。 全体エクスポートおよび全体インポートを使用した文字データの移行 多くの場合、すべてのデータを新規キャラクタ・セットに正しく変換するには、全体エクス ポートおよび全体インポートをお薦めします。文字データ型の列は、サイズ増加を処理する ためにインポート前に拡張が必要となる場合があるため、データ切捨ての問題に注意するこ とが重要です。既存の PL/SQL コードをレビューして、LENGTHB、SUBSTRB および INSTRB などのバイトベースのすべての SQL 関数、または PL/SQL の CHAR および VARCHAR2 の宣言が有効であることを確認する必要があります。 関連項目 : Export Utility と Import Utility の詳細は、『Oracle Database ユーティリティ』を参照してください。 11-8 Oracle Database グローバリゼーション・サポート・ガイド 既存のデータベースのデータベース・キャラクタ・セットの変更 CSALTER スクリプトを使用したキャラクタ・セットの移行 CSALTER スクリプトは、Database Character Set Scanner ユーティリティに付属しています。 CSALTER スクリプトはキャラクタ・セットの移行方法としては最も簡単ですが、使用でき るのは、すべてのスキーマ・データが、新しいキャラクタ・セットの完全なサブセットであ る場合のみです。新規キャラクタ・セットが現行のキャラクタ・セットの完全なスーパー セットであるのは、次の場合です。 ■ ■ 現行のキャラクタ・セット内のすべての文字が、新規キャラクタ・セットで使用可能な 場合。 現行のキャラクタ・セット内のすべての文字が、新規キャラクタ・セット内で同じコー ド・ポイント値を持つ場合。たとえば、多くのキャラクタ・セットは US7ASCII の完全 なスーパーセットです。 完全なスーパーセットという基準からみると、CSALTER スクリプトにより新しいキャラク タ・セットに変換されるのはメタデータのみとなります。ただし、CSALTER スクリプトで は、Oracle により作成されたデータ・ディクショナリとサンプル・スキーマの CLOB 列に対 してのみデータ変換が実行されます。ユーザーが作成した CLOB 列には、別個の処理が必要 になる場合があります。Oracle9i からは、データ・ディクショナリおよびサンプル・スキー マの一部の内部フィールドが CLOB 列に格納されます。また、ユーザーがデータを CLOB フィールドに格納している場合もあります。データベース・キャラクタ・セットがマルチバ イトの場合、CLOB データは UCS-2 データとの互換形式で格納されます。データベース・ キャラクタ・セットがシングルバイトの場合、CLOB データはデータベース・キャラクタ・ セットを使用して格納されます。CSALTER スクリプトで変換されるのは、Oracle により作 成されたデータ・ディクショナリおよびサンプル・スキーマの CLOB 列にあるデータのみで あるため、CSALTER スクリプトを実行する前に、他に作成された CLOB 列をエクスポート してスキーマから削除する必要があります。 データベース・キャラクタ・セットを変更する手順は、次のとおりです。 1. SHUTDOWN IMMEDIATE 文または SHUTDOWN NORMAL 文のいずれかを使用して、デー タベースをシャットダウンします。 2. CSALTER スクリプトはロールバックできないため、データベースの全体バックアップ を実行します。 3. データベースを起動します。 4. Database Character Set Scanner ユーティリティを実行します。 CSSCAN /AS SYSDBA FULL=Y... 5. CSALTER スクリプトを実行します。 @@CSALTER.PLB NORMAL SHUTDOWN IMMEDIATE; -- or SHUTDOWN NORMAL; STARTUP; キャラクタ・セットの移行 11-9 既存のデータベースのデータベース・キャラクタ・セットの変更 関連項目 : ■ ■ ■ 11-10 ページ「CSALTER スクリプトと選択式のインポートを使用した 文字データの移行」 全スーパーセット・キャラクタ・セットのリストは、付録 A「ロケー ル・データ」を参照してください。 12-43 ページ「Database Character Set Scanner の CSALTER スクリプ ト」 Oracle Real Application Clusters 環境での CSALTER スクリプトの使用 Oracle Real Application Clusters 環境では、CSALTER スクリプトを発行する前に、ユーザー が接続に使用しているインスタンスに関連付けられたバックグラウンド・プロセス以外に、 Oracle バックグラウンド・プロセスが実行されていないことを確認してください。これを確 認するには、DBA 権限を使用して次の SQL 文を発行します。 SELECT SID, SERIAL#, PROGRAM FROM V$SESSION; キャラクタ・セットの変更を完了できるように、CLUSTER_DATABASE 初期化パラメータを FALSE に設定します。キャラクタ・セットの変更後に、TRUE にリセットしてください。 CSALTER スクリプトと選択式のインポートを使用した文字データの移行 もう 1 つの文字データ移行方法は、選択式のエクスポートを指定した後に再スキャンして CSALTER スクリプトを実行することです。このアプローチは、がシングルバイトのサブ セット・キャラクタ・セットからマルチバイト・キャラクタ・セットに移行する場合に最も 一般的です。この使用例では、エンコーディングがシングルバイトのキャラクタ・セットか ら UCS-2 互換形式に変化するため、ユーザー作成の CLOB を変換する必要があります。 UCS-2 は、マルチバイトのエンコーディングに関係なく Oracle で CLOB の格納に使用され ます。Database Character Set Scanner では、これらの列が変換可能として識別されます。 ユーザーは、これらの列をエクスポートし、スキーマから削除した後で再スキャンし、残り のデータに問題がなければ CSALTER スクリプトを実行する必要があります。これらの手順 が完了した後、CLOB 列をデータベースにインポートして移行を完了します。 11-10 Oracle Database グローバリゼーション・サポート・ガイド NCHAR データ型への移行 NCHAR データ型への移行 Oracle9i からは、NCHAR データ型の列に格納されるデータには、データベース・キャラク タ・セットに関係なく Unicode エンコーディングのみが使用されます。このため、データ ベース・キャラクタ・セットとして Unicode を使用しないデータベースに、Unicode を格納 できます。 この項の内容は、次のとおりです。 ■ バージョン 8 から Oracle9i 以上への NCHAR 列の移行 ■ 各国語キャラクタ・セットの変更 ■ CHAR 列から NCHAR 列への移行 バージョン 8 から Oracle9i 以上への NCHAR 列の移行 バージョン 8 の Oracle データベースでは、各国語キャラクタ・データ型(NCHAR)を導入 しました。このデータ型によって、データベース・キャラクタ・セットに加えて、2 つ目の 代替キャラクタ・セットが使用できるようになりました。NCHAR データ型は、複数の固定幅 のアジア言語のキャラクタ・セットをサポートしています。これらのキャラクタ・セット は、アジア言語の文字データの処理パフォーマンスを向上させるために導入されたもので す。 Oracle9i からは、SQL NCHAR データ型の使用は、Unicode キャラクタ・セット・エンコー ディング(UTF8 と AL16UTF16)に制限されています。JA16SJISFIXED などのアジア言語の キャラクタ・セットも含めて、NCHAR データ型で使用可能であったバージョン 8 の他のキャ ラクタ・セットは、現在ではサポートされていません。 既存の NCHAR、NVARCHAR2 および NCLOB の各列を Oracle9i 以上の NCHAR データ型に移行 する手順は、次のとおりです。 1. すべての NCHAR 列をバージョン 8 または Oracle8i のデータベースからエクスポートし ます。 2. NCHAR 列を削除します。 3. データベースを新しいリリースにアップグレードします。 4. NCHAR 列をアップグレード後のデータベースにインポートします。 移行ユーティリティでは、バージョン 8 および Oracle8i の NCHAR 列を新しいリリースの NCHAR 列に変換することもできます。移行ユーティリティでは、utlnchar.sql という SQL NCHAR のアップグレード・スクリプトが提供されています。このスクリプトをデータ ベース移行操作の最後に実行して、バージョン 8 と Oracle8i の NCHAR 列を新しいリリース の NCHAR 列に変換します。スクリプトの実行後は、データをダウングレードできません。 バージョン 8 または Oracle8i に移動して戻る唯一の方法は、すべての NCHAR 列を削除して データベースをダウングレードし、古い NCHAR データを前のバージョン 8 または Oracle8i のエクスポート・ファイルからインポートすることです。データベースを将来ダウングレー キャラクタ・セットの移行 11-11 NCHAR データ型への移行 ドする必要がある場合は、バージョン 8 または Oracle8i の NCHAR データのバックアップ (エクスポート・ファイル)があることを確認してください。 関連項目 : ■ ■ エクスポートとインポートの手順の詳細は、 『Oracle Database ユー ティリティ』を参照してください。 NCHAR の移行の詳細は、『Oracle Database アップグレード・ガイド』 を参照してください。 各国語キャラクタ・セットの変更 各国語キャラクタ・セットを変更するには、CSALTER スクリプトを使用します。 関連項目 : CSALTER スクリプトの構文は、第 12 章「Character Set Scanner ユーティリティ」を参照してください。 CHAR 列から NCHAR 列への移行 次の方法で列のデータ型定義を変更できます。 ■ ALTER TABLE MODIFY 文 ■ 表のオンライン再定義 ALTER TABLE MODIFY 文には、表のオンライン再定義に比べて次の利点があります。 ■ 使用方法が簡単 ■ 制限が少ない 表のオンライン再定義には、ALTER TABLE MODIFY 文に比べて次の利点があります。 ■ 列に大量のデータが含まれている場合に高速である ■ 一度に複数の列を移行可能 ■ ほとんどの移行プロセス中に表を DML に使用可能 ■ 表の断片化が回避されるため、領域が節約され、データへの高速アクセスが可能 ■ CLOB データ型から NCLOB データ型への移行に使用可能 この項の内容は、次のとおりです。 ■ ALTER TABLE MODIFY 文を使用した CHAR 列から NCHAR 列への変更 ■ 表のオンライン再定義を使用した大きい表の Unicode への移行 11-12 Oracle Database グローバリゼーション・サポート・ガイド NCHAR データ型への移行 ALTER TABLE MODIFY 文を使用した CHAR 列から NCHAR 列への変更 ALTER TABLE MODIFY 文を使用すると、表の列定義を CHAR データ型から NCHAR データ 型に変更できます。また、列のすべてのデータをデータベース・キャラクタ・セットから NCHAR キャラクタ・セットに変換できます。ALTER TABLE MODIFY 文の構文は、次のとお りです。 ALTER TABLE table_name MODIFY (column_name datatype); 移行する列に索引が作成されている場合、索引は各行とともに更新されるため、索引を削除 すると ALTER TABLE MODIFY 文のパフォーマンスを改善できます。 NCHAR 列と NVARCHAR2 列の最大長は、それぞれ 2000 バイトと 4000 バイトです。NCHAR のキャラクタ・セットが AL16UTF16 の場合、NCHAR 列と NVARCHAR2 列の最大長は 1000 文字と 2000 文字、つまり 2000 バイトと 4000 バイトです。移行中にこのサイズ制限に対す る違反となる場合は、かわりに列を NCLOB データ型に変更することを考慮してください。 注意 : ALTER TABLE MODIFY 文を使用して CLOB 列を NCLOB 列に移行 することはできません。列を CLOB データ型から NCLOB データ型に変更 するには、表のオンライン再定義を使用します。 関連項目 : 11-13 ページ「表のオンライン再定義を使用した大きい表の Unicode への移行」 表のオンライン再定義を使用した大きい表の Unicode への移行 多数の行を含む大きい表を Unicode データ型に移行するには、長時間かかります。この移行 中は、列データを読込みや更新に使用できません。表のオンライン再定義を使用すると、移 行時間を大幅に短縮できます。また、この場合、移行時間中の大部分は、表に DML でアク セスできます。 次のタスクを実行し、表のオンライン再定義を使用して、表を Unicode データ型に移行しま す。 1. DBMS_REDEFINITION.CAN_REDEF_TABLE PL/SQL プロシージャを使用して、表をオ ンラインで再定義できることを確認します。たとえば、scott.emp 表を移行するには、 次のコマンドを入力します。 DBMS_REDEFINITION.CAN_REDEF_TABLE('scott','emp'); キャラクタ・セットの移行 11-13 NCHAR データ型への移行 2. 再定義する表と同じスキーマに空の仮表を作成します。作成時には、属性に NCHAR デー タ型を指定します。たとえば、次のように文を入力します。 CREATE TABLE int_emp( empno NUMBER(4), ename NVARCHAR2(10), job NVARCHAR2(9), mgr NUMBER(4), hiredate DATE, sal NUMBER(7,2), deptno NUMBER(2), org NVARCHAR2(10)); 3. 表のオンライン再定義を開始します。次のようにコマンドを入力します。 DBMS_REDEFINITION.START_REDEF_TABLE('scott', 'emp', 'int_emp', 'empno empno, to_nchar(ename) ename, to_nchar(job) job, mgr mgr, hiredate hiredate, sal sal, deptno deptno, to_nchar(org) org'); CLOB 列を NCLOB 列に移行する場合は、TO_NCHAR SQL 関数のかわりに TO_NCLOB SQL 変換関数を使用します。 4. 仮表のトリガー、索引、権限付与および制約を作成します。仮表に適用される参照制約 は、DISABLED モードで作成する必要があります(仮表は、参照制約の親表または子表 です) 。仮表に定義するトリガーは、表のオンライン再定義プロセスが完了するまで実 行されません。 5. 仮表を元の表と同期化できます。オンライン再定義の開始後に元の表に多数の DML 操 作が適用されている場合は、DBMS_REDEFINITION.SYNC_INTERIM_TABLE プロシー ジャを実行します。これにより、DBMS_REDEFINITION.FINISH_REDEF_TABLE プロ シージャの所要時間が短縮されます。次のようにコマンドを入力します。 DBMS_REDEFINITION.SYNC_INTERIM_TABLE('scott', 'emp', 'int_emp'); 11-14 Oracle Database グローバリゼーション・サポート・ガイド NCHAR データ型への移行 6. DBMS_REDEFINITION.FINISH_REDEF_TABLE プロシージャを実行します。次のよう にコマンドを入力します。 DBMS_REDEFINITION.RINISH_REDEF_TABLE('scott', 'emp', 'int_emp'); このプロセスが完了すると、次の条件が満たされます。 ■ ■ 7. 元の表は、仮表のすべての属性、索引、制約、権限付与およびトリガーを持つよう に再定義されます。 仮表に適用される参照制約が、再定義後の元の表に適用されます。 仮表を削除します。次のような文を入力します。 DROP TABLE int_emp; 表のオンライン再定義タスクの結果は、次のようになります。 ■ ■ ■ ■ 元の表が Unicode 列に移行されます。 START_REDEF_TABLE サブプログラムから FINISH_REDEF_TABLE サブプログラムま でに、仮表に対して定義されたトリガー、権限付与、索引および制約が、再定義後の元 の表に定義されます。仮表に適用される参照制約が、再定義後の元の表に適用され、使 用可能になります。 再定義前に元の表に定義されていたトリガー、権限付与、索引および制約が仮表に転送 され、仮表を削除すると一緒に削除されます。仮表に再定義を適用する前に元の表に適 用されていた参照制約が、使用禁止になります。 再定義前に元の表に定義されていた PL/SQL プロシージャとカーソルが無効になりま す。これらは、次回に使用されるときに自動的に再検証されます。表の定義が変更され ているため、再検証は失敗することがあります。 関連項目 : 表のオンライン再定義の詳細は、 『Oracle Database 管理者ガ イド』を参照してください。 キャラクタ・セットの移行 11-15 キャラクタ・セット移行後にデータベース・スキーマをリカバリするタスク キャラクタ・セット移行後にデータベース・スキーマを リカバリするタスク 移行後のデータベース・スキーマを元の状態にリカバリするために、追加のタスクが必要に なる場合があります。表 11-2 に、考慮が必要な問題を示します。 表 11-2 移行したデータベース・スキーマのリカバリ中の問題 問題 説明 索引 ALTER TABLE MODIFY 文によって表の列が CHAR データ型から NCHAR データ型に変更される と、その列に作成される索引はデータベースによって自動的に変更されます。このため、ALTER TABLE MODIFY 文のパフォーマンスが低下します。ALTER TABLE MODIFY 文を発行する前に 索引を削除した場合は、移行後に再作成します。 制約 移行前に制約を使用禁止にした場合は、移行後に再び使用可能にします。 トリガー 移行前にトリガーを使用禁止にした場合は、移行後に再び使用可能にします。 レプリケーション Unicode データ型に移行する列が複数のサイト間でレプリケートされる場合は、マスター定義サ イトで変更を実行する必要があります。これにより、変更が他のサイトに伝播します。 バイナリ順序 データベースと NCHAR データのキャラクタ・セットが異なる場合、CHAR データ型から NCHAR データ型への移行にはキャラクタ・セット変換が伴います。エンコーディングが異なると、同じ データのバイナリ順序が異なる可能性があります。これは、バイナリ順序に依存するアプリケー ションに影響します。 11-16 Oracle Database グローバリゼーション・サポート・ガイド 12 Character Set Scanner ユーティリティ Character Set Scanner ユーティリティは、有効なデータと無効なデータを検出して検証する ためのツールです。Language and Character Set File Scanner はテキスト・ファイルをサ ポートしますが、Database Character Set Scanner はデータベース内でデータをスキャンしま す。 この章では、Language and Character Set File Scanner と Database Character Set Scanner に ついて説明します。この章の内容は、次のとおりです。 ■ Language and Character Set File Scanner ■ Database Character Set Scanner ■ Database Character Set Scanner のスキャン・モード ■ Database Character Set Scanner のインストールと起動 ■ Database Character Set Scanner パラメータ ■ Database Character Set Scanner セッション : 例 ■ Database Character Set Scanner レポート ■ データ・ディクショナリ内の変換可能データまたは不可逆データを処理する方法 ■ Database Character Set Scanner の記憶域とパフォーマンスに関する考慮事項 ■ Database Character Set Scanner の CSALTER スクリプト ■ Database Character Set Scanner のビュー ■ Database Character Set Scanner エラー・メッセージ Character Set Scanner ユーティリティ 12-1 Language and Character Set File Scanner Language and Character Set File Scanner Language and Character Set File Scanner(LCSSCAN)は、統計に基づく高パフォーマンスの ユーティリティであり、不明なファイル・テキストの言語とキャラクタ・セットを判別しま す。様々な言語とキャラクタ・セットのペアを自動的に識別できます。言語およびキャラク タ・セット検出エンジンでは、各テキストを使用して一連の確率が設定され、各確率は 1 つ の言語およびキャラクタ・セットのペアに対応します。統計的に最も可能性の高いペアによ り、主要な言語とキャラクタ・セットが識別されます。 テキストの純粋性は、言語およびキャラクタ・セット検出の正確さに影響します。許容され るのはプレーン・テキスト・ファイルのみのため、Language and Character Set File Scanner を使用する前にマークアップ・タグを削除する必要があります。理想的なケースは、スペル や構文の誤りのない単一言語による文章です。この種のテキストには 100 文字以上のデータ を必要とする場合があり、信頼率の高い結果を戻すことができます。これに対して、ある種 の技術文書は、より長いセグメントにしなければ認識されない場合があります。ドキュメン トに複数の言語やキャラクタ・セット、住所、電話番号などのテキストまたはプログラミン グ言語コードが混在していると、適切な結果が得られない可能性があります。たとえば、ド キュメントにフランス語とドイツ語の両方が埋め込まれていると、どちらかの言語が正常に 推測される精度は統計的に減少します。ドキュメントに住所や電話番号のような数値データ が多数含まれていると、推測の精度が低下します。 この項の内容は、次のとおりです。 ■ LCSSCAN コマンドの構文 ■ 例 : LCSSCAN コマンドの使用 ■ Language and Character Set File Scanner のコマンドライン・ヘルプの利用 ■ サポート対象の言語とキャラクタ・セット ■ LCSSCAN エラー・メッセージ 12-2 Oracle Database グローバリゼーション・サポート・ガイド Language and Character Set File Scanner LCSSCAN コマンドの構文 Language and Character Set File Scanner を起動するには、LCSSCAN コマンドを使用します。 構文は次のとおりです。 LCSSCAN [RESULTS=number] [BEGIN=number] [END=number] FILE=file_name ここでは、各パラメータについて説明します。 RESULTS RESULTS パラメータはオプションです。 プロパティ 説明 デフォルト値 1 最小値 1 最大値 3 用途 戻される言語とキャラクタ・セットのペアの数。確率順に表示され ます。最初の候補の相対的な重みは数量化できません。このパラ メータの推奨値は、デフォルト値の 1 です。 BEGIN BEGIN パラメータはオプションです。 プロパティ 説明 デフォルト値 1 最小値 1 最大値 ファイルのバイト数 用途 入力ファイル内で LCSSCAN によるスキャン処理の開始位置を示す バイト。デフォルト値は入力ファイルの 1 バイト目です。 END END パラメータはオプションです。 プロパティ 説明 デフォルト値 ファイルの終わり 最小値 3 Character Set Scanner ユーティリティ 12-3 Language and Character Set File Scanner プロパティ 説明 最大値 ファイルのバイト数 用途 入力ファイル内で LCSSCAN によりスキャンされる最終バイト。 デフォルト値は入力ファイルの最終バイトです。 FILE FILE は必須パラメータです。 プロパティ 説明 デフォルト値 なし 用途 スキャン対象となるテキスト・ファイルの名前を指定します。 例 : LCSSCAN コマンドの使用 例 12-1 LCSSCAN コマンドでファイル名のみを指定する例 LCSSCAN FILE=example.txt この例では、BEGIN および END パラメータがどちらも指定されていないため、 example.txt ファイル全体がスキャンされます。RESULTS パラメータが指定されていない ため、言語とキャラクタ・セットのペアが 1 つ戻されます。 例 12-2 LCSSCAN に対して RESULTS および BEGIN パラメータを指定する例 LCSSCAN RESULTS=2 BEGIN=50 FILE=example.txt スキャン処理はファイルの 50 バイト目から始まり、ファイルの終わりまで続行されます。 言語とキャラクタ・セットのペアが 2 つ戻されます。 例 12-3 LCSSCAN に対して RESULTS および END パラメータを指定する例 LCSSCAN RESULTS=3 END=100 FILE=example.txt スキャン処理はファイルの先頭から始まり、ファイルの 100 バイト目で終了します。言語と キャラクタ・セットのペアが 3 つ戻されます。 12-4 Oracle Database グローバリゼーション・サポート・ガイド Language and Character Set File Scanner 例 12-4 LCSSCAN に対して BEGIN および END パラメータを指定する例 LCSSCAN BEGIN=50 END=100 FILE=example.txt スキャン処理はファイルの 50 バイト目から始まり、ファイルの 100 バイト目で終了します。 RESULTS パラメータが指定されていないため、言語とキャラクタ・セットのペアが 1 つ戻 されます。 Language and Character Set File Scanner のコマンドライン・ヘルプの利用 Language and Character Set File Scanner パラメータのサマリーを取得するには、次のコマ ンドを入力します。 LCSSCAN HELP=y このコマンドを実行すると、出力には Language and Character Set File Scanner パラメータ のサマリーが表示されます。 サポート対象の言語とキャラクタ・セット Language and Character Set File Scanner は、言語ごとに複数のキャラクタ・セットをサ ポートしています。 言語のバイナリ値が、サブセット / スーパーセット関係を持つ複数のエンコーディングと一 致する場合は、サブセットのキャラクタ・セットが戻されます。たとえば、言語がドイツ語 ですべての文字が 7 ビットの場合は、WE8MSWIN1252、WE8ISO8859P15 または WE8ISO8859P1 のかわりに US7ASCII が戻されます。 キャラクタ・セットが UTF-8 であると判別されると、テキスト内で 4 バイト文字(補助文 字)が検出されないかぎり、デフォルトで Oracle のキャラクタ・セット UTF8 が戻されま す。4 バイト文字が検出されると、キャラクタ・セットは AL32UTF8 としてレポートされま す。 関連項目 : サポートされている言語とキャラクタ・セットのリストは、 A-24 ページの「言語およびキャラクタ・セット検出のサポート」を参照 してください。 Character Set Scanner ユーティリティ 12-5 Language and Character Set File Scanner LCSSCAN エラー・メッセージ LCD-00001 An unknown error occured. 原因 : 内部構造へのアクセス中にエラーが発生しました。 処置 : このエラーをオラクル社カスタマ・サポート・センターに連絡してください。 LCD-00002 NLS data could not be loaded. 原因 : $ORACLE_HOME/nls/data へのアクセス中にエラーが発生しました。 処置 : $ORACLE_HOME/nls/data が存在し、アクセス可能かどうかを確認してくださ い。このディレクトリが見つからない場合は、$ORA_NLS10 ディレクトリを調べてくだ さい。 LCD-00003 An error occurred while reading the profile file. 原因 : $ORACLE_HOME/nls/data へのアクセス中にエラーが発生しました。 処置 : $ORACLE_HOME/nls/data が存在し、アクセス可能かどうかを確認してくださ い。このディレクトリが見つからない場合は、$ORA_NLS10 ディレクトリを調べてくだ さい。 LCD-00004 The beginning or ending offset has been set incorrectly. 原因 : 開始オフセットと終了オフセットは、1 以上の整数である必要があります。 処置 : オフセットを正数に変更してください。 LCD-00005 The ending offset has been set incorrectly. 原因 : 終了オフセットは開始オフセットよりも大きい値に設定する必要があります。 処置 : 終了オフセットを開始オフセットよりも大きい値に変更してください。 LCD-00006 An error occurred when opening the input file. 原因 : ファイルが見つからないか、オープンできません。 処置 : 指定したファイル名を確認してください。完全ファイル名を指定したかどうか と、ファイルが使用中でないかどうかを確認してください。 LCD-00007 The beginning offset has been set incorrectly. 原因 : 開始オフセットは、ファイルのバイト数よりも小さい値に設定する必要がありま す。 処置 : ファイルのサイズを確認して開始オフセットの設定値を小さくしてください。 LCD-00008 No result was returned. 原因 : 入力されたテキストが短いため、結果を生成できません。 処置 : 信頼できる結果を生成するには、より大きいサンプル・テキストを入力する必要 があります。 12-6 Oracle Database グローバリゼーション・サポート・ガイド Database Character Set Scanner Database Character Set Scanner Database Character Set Scanner は、Oracle データベースから新しいデータベース・キャラ クタ・セットへの移行の実現可能性を査定します。Database Character Set Scanner により、 データベースのすべての文字データがチェックされ、キャラクタ・セット・エンコーディン グの変更による影響と問題点がテストされます。スキャンの終了時には、データベースを新 規キャラクタ・セットに変換するために必要な作業の範囲を示すサマリー・レポートが生成 されます。 サマリー・レポートの情報を参考にして、管理者は、データベースのキャラクタ・セットを 移行する最も適切な方法を決定できます。次の移行方法があります。 ■ エクスポート・ユーティリティとインポート・ユーティリティ ■ CSALTER スクリプト ■ 選択した表に対する Export Utility および Import Utility と CSALTER スクリプト 注意 : Database Character Set Scanner で変換例外がレポートされる場合 は、後述の方法を使用する前に、その問題を修正する必要があります。こ の修正には、問題のデータを分析し修正して、これらの例外を取り除く作 業も含まれます。極端な例では、データベースとアプリケーションの両方 の修正が必要となる場合もあります。データベース・キャラクタ・セット の移行に関するサービスについては、オラクル社カスタマ・サポート・セ ンターにお問い合せください。 関連項目 : 11-8 ページ「既存のデータベースのデータベース・キャラク タ・セットの変更」 文字データの変換テスト Database Character Set Scanner は、文字データを読み取り、各データ・セルについて次の条 件をテストします。 ■ 新規キャラクタ・セットへの変換時に、データ・セルの文字コード・ポイントが変わる かどうか ■ データ・セルは新規キャラクタ・セットに正常に変換できるかどうか ■ 変換後のデータは現行の列サイズに適合するかどうか Database Character Set Scanner は、CHAR、VARCHAR2、LONG、CLOB、NCHAR、 NVARCHAR2、NCLOB および VARRAY 列のデータを読み取ってテストします。LONG、CLOB および NCLOB 列については、変換後の列サイズのテストは実行しません。 Character Set Scanner ユーティリティ 12-7 Database Character Set Scanner のスキャン・モード Database Character Set Scanner のスキャン・モード Database Character Set Scanner には、次の 3 つのデータベース・スキャン・モードがありま す。 ■ 全データベース・スキャン ■ ユーザー・スキャン ■ 表スキャン 全データベース・スキャン Database Character Set Scanner は、データ・ディクショナリ(SYS および SYSTEM ユー ザー)も含めたデータベース内の全ユーザーに属しているすべての表の文字データを読み 取って検証し、新規データベース・キャラクタ・セットへの擬似的な移行による影響をレ ポートします。ストアド・パッケージ、プロシージャ、ファンクションおよびデータ・ディ クショナリの一部として格納されているオブジェクト定義を含めて、すべてのスキーマ・オ ブジェクトがスキャンされます。 新規データベース・キャラクタ・セットへのデータベース移行の実現可能性を把握するに は、全データベース・スキャンを実行する必要があります。 ユーザー・スキャン Database Character Set Scanner は、指定したユーザーに属しているすべての表の文字データ を読み取って検証し、キャラクタ・セットの変更による表への影響をレポートします。 表スキャン Database Character Set Scanner は、指定した表の文字データを読み取って検証し、キャラク タ・セットの変更による表への影響をレポートします。 12-8 Oracle Database グローバリゼーション・サポート・ガイド Database Character Set Scanner のインストールと起動 Database Character Set Scanner のインストールと起動 この項では、Database Character Set Scanner をインストールして起動する方法について説明 します。この章の内容は、次のとおりです。 ■ Database Character Set Scanner 用のアクセス権限 ■ Database Character Set Scanner のインストール ■ Database Character Set Scanner の起動 ■ Database Character Set Scanner パラメータ・ファイルの作成 ■ Database Character Set Scanner のコマンドライン・ヘルプの利用 Database Character Set Scanner 用のアクセス権限 Database Character Set Scanner を使用するには、Oracle データベースの DBA 権限が必要で す。 Database Character Set Scanner のインストール Database Character Set Scanner を使用する前に、スキャンするデータベースで csminst.sql スクリプトを実行する必要があります。csminst.sql スクリプトを実行する必要があるの は 1 回のみです。このスクリプトは、次の作業を実行して、データベースをスキャンする準 備を行います。 ■ ユーザー名 CSMIG の作成 ■ 必要な権限の CSMIG への割当て ■ デフォルト表領域の CSMIG への割当て ■ CSMIG での接続 ■ CSMIG の下に Character Set Scanner のシステム表を作成 デフォルトでは、SYSTEM 表領域が CSMIG に割り当てられます。データベースをスキャン する前に、SYSTEM 表領域に使用可能な記憶域が十分にあることを確認する必要がありま す。必要な領域の量は、スキャンのタイプおよびデータベース内のデータの性質によって異 なります。 関連項目 : 12-40 ページ「Database Character Set Scanner の記憶域とパ フォーマンスに関する考慮事項」 Character Set Scanner ユーティリティ 12-9 Database Character Set Scanner のインストールと起動 csminst.sql スクリプトを編集すると、CSMIG のデフォルト表領域を変更できます。 csminst.sql で次の文を変更し、次のように、指定した表領域を CSMIG に割り当てます。 ALTER USER csmig DEFAULT TABLESPACE tablespace_name; UNIX プラットフォームの場合は、次のコマンドと SQL 文を使用して csminst.sql を実 行します。 % cd $ORACLE_HOME/rdbms/admin % sqlplus "system/manager as sysdba" SQL> START csminst.sql Database Character Set Scanner の起動 Database Character Set Scanner は、次のいずれかの方法でコマンドラインから起動できま す。 ■ Database Character Set Scanner パラメータ・ファイルを使用する方法。 CSSCAN username/password PARFILE=file_name ■ コマンドラインを使用してパラメータ値を指定する方法。次に例を示します。 CSSCAN username/password FULL=y TOCHAR=al32utf8 ARRAY=10240 PROCESS=3 ■ 対話型セッションを使用する方法 CSSCAN username/password 対話型セッションでは、次のパラメータの値を入力するように求められます。 FULL/TABLE/USER TOCHAR ARRAY PROCESS 他のパラメータを指定する場合は、Database Character Set Scanner パラメータ・ファイルを 使用するか、または CSSCAN コマンドでパラメータ値を指定します。 12-10 Oracle Database グローバリゼーション・サポート・ガイド Database Character Set Scanner のインストールと起動 Database Character Set Scanner パラメータ・ファイルの作成 Database Character Set Scanner パラメータ・ファイルを使用すると、ファイルに Database Character Set Scanner パラメータを指定でき、パラメータの変更や再利用を簡単に実行でき ます。パラメータ・ファイルの作成にはテキスト・エディタを使用します。 Database Character Set Scanner パラメータ・ファイル内で、次のいずれかの書式を使用して パラメータを指定します。 parameter_name=value parameter_name=(value1, value2, ...) シャープ(#)記号を前に付けて文を記述すると、パラメータ・ファイルにコメントを追加 できます。シャープ記号の右側の文字はすべて無視されます。 パラメータ・ファイルの例を次に示します。 USERID=system/manager USER=HR # scan HR tables TOCHAR=al32utf8 ARRAY=4096000 PROCESS=2 # use two concurrent scan processes FEEDBACK=1000 関連項目 : 12-12 ページ「Database Character Set Scanner パラメータ」 Database Character Set Scanner のコマンドライン・ヘルプの利用 Database Character Set Scanner には、コマンドライン・ヘルプが用意されています。次のコ マンドを入力します。 CSSCAN HELP=Y このコマンドを実行すると、出力には Database Character Set Scanner パラメータのサマ リーが表示されます。 Character Set Scanner ユーティリティ 12-11 Database Character Set Scanner パラメータ Database Character Set Scanner パラメータ 次の表に、Database Character Set Scanner のパラメータのサマリーを示します。表に続い て、各パラメータの詳細を説明します。 パラメータ デフォルト プロンプト 説明 USERID - あり ユーザー名 / パスワード FULL N あり データベース全体のスキャン USER - あり スキャンする表の所有者 TABLE - あり スキャンする表のリスト EXCLUDE - なし 除外する表のリスト TOCHAR - あり 新規のデータベース・キャラクタ・セット名 FROMCHAR - なし 現行のデータベース・キャラクタ・セット名 TONCHAR - なし 新規の各国語キャラクタ・セット名 FROMNCHAR - なし 現行の各国語キャラクタ・セット名 ARRAY 102400 あり 配列フェッチ・バッファのサイズ PROCESS 1 あり 同時スキャン・プロセス数 MAXBLOCKS - なし 分割しない場合の表の最大許容ブロック数 CAPTURE N なし 変換可能なデータの取得 SUPPRESS - なし 表ごとにログに記録される最大例外数 FEEDBACK - なし n 行ごとに進行をレポート BOUNDARIES - なし サマリー・レポートの列サイズ境界のリスト LASTRPT N なし 前回のデータベース・スキャンのレポートを生成 LOG scan なし レポート・ファイルのベース・ファイル名 PARFILE - なし パラメータ・ファイル名 PRESERVE N なし 既存のスキャン結果の保持 LCSD N なし 言語およびキャラクタ・セット検出の有効化 LCSDDATA LOSSY なし 言語およびキャラクタ・セット検出の有効範囲の定義 HELP N なし ヘルプ画面の表示 12-12 Oracle Database グローバリゼーション・サポート・ガイド Database Character Set Scanner パラメータ ARRAY プロパティ 説明 デフォルト値 102400 最小値 4096 最大値 無制限 用途 データのフェッチに使用される配列バッファのサイズをバイト単位 で指定します。配列バッファのサイズによって、一度にフェッチさ れる行数が決まります。 次の式で、指定の表について一度にフェッチされる行数が見積もられます。 rows fetched = (ARRAY value) / [(sum of all the CHAR and VARCHAR2 column sizes) + (number of CLOB columns * 4000) + (number of VARRAY columns * 4000)] たとえば、表 A に CHAR 列が 2 つ(5 バイトと 10 バイト)、VARCHAR2 列が 2 つ(100 バイ トと 200 バイト)および CLOB 列が 1 つあるとします。ARRAY=102400(デフォルト)の場 合、フェッチされる行数は次のように計算されます。 102400/[5 + 10 + 100 + 200 + (1*4000) + (0*4000)] = 23.7 Database Character Set Scanner では、表 A から一度に 23 行のデータをフェッチできます。 分母の合計が ARRAY パラメータの値を超える場合は、一度に 1 行のみがフェッチされます。 LONG 列がある表は、一度に 1 行のみがフェッチされます。 このパラメータは、データベース・スキャンの処理時間に影響を与えます。通常、配列バッ ファのサイズが大きくなると、処理時間は短くなります。スキャン・プロセスごとに、指定 したサイズの配列バッファが割り当てられます。 BOUNDARIES プロパティ 説明 デフォルト値 なし 用途 アプリケーション・データの変換サマリー・レポートに使用される 列境界サイズのリストを指定します。このパラメータは、CHAR、 VARCHAR2、NCHAR および NVARCHAR2 データ型のアプリケーショ ン・データの分散位置を示すために使用されます。 Character Set Scanner ユーティリティ 12-13 Database Character Set Scanner パラメータ たとえば、BOUNDARIES 値を (10, 100, 1000) と指定すると、アプリケーション・デー タの変換サマリー・レポートは、CHAR データをその列の長さによって、CHAR(1..10)、 CHAR(11..100) および CHAR(101..1000) のグループに分割します。この動作は、 VARCHAR2、NCHAR および NVARCHAR2 データ型の場合も同様です。 CAPTURE プロパティ 説明 デフォルト値 N 値の範囲 Y または N 用途 デフォルトまたは例外行の格納と同様に、変換可能な個々の行に関 する情報を取得するかどうかを示します。CAPTURE パラメータを Y に設定すると、変換可能行の情報が CSM$ERRORS 表に書き込まれ ます。この情報を使用すると、選択した表に対するエクスポートお よびインポート・プロセスを使用して、変換先のキャラクタ・セッ トに変換する必要があるレコード数を推定できます。CAPTURE=y に設定すると、パフォーマンスが低下し、必要な記憶容量が増える 場合があります。 EXCLUDE プロパティ 説明 デフォルト値 なし 用途 スキャンから除外する表の名前を指定します。 このパラメータを指定すると、指定した表がスキャン対象から除外されます。表の名前は次 の方法で指定できます。 ■ schemaname では、除外する表を含むユーザー・スキーマの名前を指定します。 ■ tablename では、除外する 1 つ以上の表の名前を指定します。 たとえば、次のコマンドでは、employees および departments 表を除き、hr サンプル・ スキーマに属している表がすべてスキャンされます。 CSSCAN system/manager USER=HR EXCLUDE=(HR.EMPLOYEES , HR.DEPARTMENTS) ... 12-14 Oracle Database グローバリゼーション・サポート・ガイド Database Character Set Scanner パラメータ FEEDBACK プロパティ 説明 デフォルト値 なし 最小値 100 最大値 100000 用途 N 行がスキャンされるたびに、ドットが 1 つ表示される形式で進捗 メーターを表示することを指定します。 たとえば、FEEDBACK=1000 と指定すると、1000 行がスキャンされるたびにドットが 1 つ表 示されます。FEEDBACK 値は、スキャン対象の表すべてに適用されます。表ごとに個別に設 定することはできません。 FROMCHAR プロパティ 説明 デフォルト値 なし 用途 データベース内の CHAR、VARCHAR2、LONG および CLOB データ型 の現行のキャラクタ・セット名を指定します。デフォルトでは、前 述のデータ型のキャラクタ・セットは、データベース・キャラク タ・セットであるとみなされます。 このパラメータを使用すると、データベース内の CHAR、VARCHAR2、LONG および CLOB データのデフォルトのデータベース・キャラクタ・セット定義をオーバーライドできます。 FROMNCHAR プロパティ 説明 デフォルト値 なし 用途 データベース内の NCHAR、NVARCHAR2 および NCLOB データ型の 現行の各国語データベース・キャラクタ・セット名を指定します。 デフォルトでは、前述のデータ型のキャラクタ・セットは、各国語 データベース・キャラクタ・セットであるとみなされます。 このパラメータを使用すると、データベース内の NCHAR、NVARCHAR2 および NCLOB デー タのデフォルトのデータベース・キャラクタ・セット定義をオーバーライドできます。 Character Set Scanner ユーティリティ 12-15 Database Character Set Scanner パラメータ FULL プロパティ 説明 デフォルト値 N 値の範囲 Y または N 用途 全データベース・スキャンを実行するかどうか(つまり、データ・ ディクショナリも含めてデータベース全体をスキャンするかどう か)を示します。全データベース・モードでスキャンする場合は FULL=Y を指定します。 関連項目 : 全データベース・スキャンの詳細は、12-8 ページの 「Database Character Set Scanner のスキャン・モード」を参照してくださ い。 HELP プロパティ 説明 デフォルト値 N 値の範囲 Y または N 用途 Database Character Set Scanner パラメータの説明が記述されたヘル プ・メッセージを表示します。 関連項目 : 12-11 ページ「Database Character Set Scanner のコマンドライ ン・ヘルプの利用」 LASTRPT プロパティ 説明 デフォルト値 N 値の範囲 Y または N 用途 直前のデータベース・スキャンで収集した統計情報に基づいて、 Database Character Set Scanner レポートを再生成するかどうかを示 します。 12-16 Oracle Database グローバリゼーション・サポート・ガイド Database Character Set Scanner パラメータ LASTRPT=Y と指定すると、データベースはスキャンされず、かわりに以前のデータベー ス・スキャン・セッションが残した情報を使用してレポート・ファイルが作成されます。 LASTRPT=Y を指定した場合は、USERID、BOUNDARIES および LOG パラメータのみが有効 です。 LCSD プロパティ 説明 デフォルト値 N 値の範囲 Y または N 用途 スキャン中に言語およびキャラクタ・セット検出を適用するかどう かを示します。 LCSD=Y を指定すると、Database Character Set Scanner(CSSCAN)は LCSDATA パラメータ で分類されたデータ・セルに対して言語およびキャラクタ・セット検出を実行します。検出 精度は、分析するテキストのサイズと品質に大きく左右されます。理想的なケースは、スペ ルや構文の誤りのない単一言語による文章です。データ・セルに言語、キャラクタ・セット または住所や名前などのテキストが混在していると、適切な結果が得られない可能性があり ます。CSSCAN で最も可能性の高い言語とキャラクタ・セットを判別できない場合は、セル ごとに最も可能性の高い言語とキャラクタ・セットが最大 3 つまで戻されます。また、1 つ も戻されない場合もあります。CSSCAN では、9 バイト以下のデータを含むデータ・セルは 無視され、その言語とキャラクタ・セットについては UNKNOWN が戻されます。 言語およびキャラクタ・セット検出は統計に基づくテクノロジであるため、その精度は入力 データの品質に応じて異なります。その目的は、CSSCAN ユーザーにデータベース内の不明 データに関する追加情報を提供することです。CSSCAN ユーザーは、データを他のキャラク タ・セットに移行する前に、検出結果とデータ自体を検討する必要があります。 分析するデータ量によっては、言語およびキャラクタ・セット検出を実行すると Database Character Set Scanner のパフォーマンスが低下する可能性があることに注意してください。 関連項目 : 12-2 ページ「Language and Character Set File Scanner」 Character Set Scanner ユーティリティ 12-17 Database Character Set Scanner パラメータ LCSDDATA プロパティ 説明 デフォルト値 LOSSY 値の範囲 LOSSY、TRUNCATION、CONVERTIBLE、CHANGELESS、ALL 用途 言語およびキャラクタ・セット検出の有効範囲を指定します。 デフォルトでは、検出は LOSSY データ・セルにのみ適用されます。 このパラメータは、LCSD=Y を指定している場合にのみ有効です。たとえば、LCSD=Y かつ LCSDATA=LOSSY, CONVERTIBLE の場合は、LOSSY または CONVERTIBLE であるデータ・ セルのキャラクタ・セットと言語の検出が試行されます。CHANGELESS および TRUNCATION として分類されるデータは処理されません。LCSDATA=ALL に設定すると、現 行のセッションでスキャンされた全データ・セルに対して言語およびキャラクタ・セット検 出が実行されます。 CONVERTIBLE および TRUNCATION データ・セルに言語およびキャラクタ・セット検出が適 用された後、一部のデータ・セルが元の分類から LOSSY に変更されることがあります。こ の分類変更が発生するのは、キャラクタ・セット検出プロセスにより、これらのデータ・セ ルのキャラクタ・セットが FROMCHAR パラメータに指定されているキャラクタ・セットでは ないと判別された場合です。 LOG プロパティ 説明 デフォルト値 scan 用途 次の Database Character Set Scanner レポート・ファイルのベース・ ファイル名を指定します。 ■ 拡張子が .txt のデータベース・スキャンのサマリー・レポー ト・ファイル ■ 拡張子が .err の個別例外レポート・ファイル ■ 拡張子が .out の画面ログ・ファイル デフォルトでは、現行のディレクトリに scan.txt、scan.err および scan.out の 3 つ のテキスト・ファイルが生成されます。 12-18 Oracle Database グローバリゼーション・サポート・ガイド Database Character Set Scanner パラメータ MAXBLOCKS プロパティ 説明 デフォルト値 なし 最小値 1000 最大値 無制限 用途 表ごとの最大ブロック・サイズを指定し、サイズの大きい表を Database Character Set Scanner が処理するための小さいチャンクに 分割します。 たとえば、MAXBLOCKS パラメータを 1000 に設定すると、サイズが 1000 ブロックよりも大 きい表は、n 個のチャンクに分割されます。この場合は、n=CEIL( 表ブロック・サイズ /1000) です。 大きい表をいくつかの小さい部分に分割する処理が有効なのは、PROCESS で設定されたプ ロセスの数が 1 より大きい場合のみです。MAXBLOCKS パラメータが設定されていない場合、 Database Character Set Scanner は独自の最適化ルールに基づいて大きい表の分割を試みま す。 PARFILE プロパティ 説明 デフォルト値 なし 用途 Database Character Set Scanner パラメータのリストが含まれている ファイルの名前を指定します。 関連項目 : 12-10 ページ「Database Character Set Scanner の起動」 PRESERVE プロパティ 説明 デフォルト値 N 値の範囲 Y または N 用途 前回のスキャン・セッションから収集された統計を保つかどうかを 示します。 Character Set Scanner ユーティリティ 12-19 Database Character Set Scanner パラメータ PRESERVE=Y と指定すると、前回のスキャンからの統計がすべて保たれます。現行のスキャ ン要求でスキャンされる表の新規統計は、追加(PRESERVE=Y の場合)または上書き (PRESERVE=N の場合)されます。 PROCESS プロパティ 説明 デフォルト値 1 最小値 1 最大値 32 用途 データベース・スキャンに利用するための同時実行スキャン・プロ セスの数を指定します。 SUPPRESS プロパティ 説明 デフォルト値 未設定(行数は無制限) 最小値 0 最大値 無制限 用途 ログに記録されるデータ例外の最大数を表ごとに指定します。 データ・セルで例外が検出されると、CSM$ERRORS 表に情報が挿入されます。表は、レポー トされる例外数に応じて大きくなります。 このパラメータを使用して、表ごとに指定した数の例外が挿入された後、個々の例外情報の ロギングを抑制します。たとえば、SUPPRESS を 100 に設定すると、表ごとに最大 100 個の 例外レコードが記録されます。 関連項目 : 12-40 ページ「Database Character Set Scanner の記憶域に関 する考慮事項」 12-20 Oracle Database グローバリゼーション・サポート・ガイド Database Character Set Scanner パラメータ TABLE プロパティ 説明 デフォルト値 なし 用途 スキャンする表の名前を指定します。 表の名前は次の方法で指定できます。 ■ schemaname では、スキャンする表を含むユーザー・スキーマの名前を指定します。 ■ tablename では、スキャンする 1 つ以上の表の名前を指定します。 たとえば、次のコマンドでは、HR サンプル・スキーマ内の employees および departments 表がスキャンされます。 CSSCAN system/manager TABLE=(HR.EMPLOYEES, HR.DEPARTMENTS) TOCHAR プロパティ 説明 デフォルト値 なし 用途 CHAR、VARCHAR2、LONG および CLOB データの変換先データベー ス・キャラクタ・セット名を指定します。 TONCHAR プロパティ 説明 デフォルト値 なし 用途 NCHAR、NVARCHAR2 および NCLOB データの変換先データベース・ キャラクタ・セット名を指定します。 TONCHAR の値を指定しない場合、NCHAR、NVARCHAR2 および NCLOB データはスキャンさ れません。 Character Set Scanner ユーティリティ 12-21 Database Character Set Scanner パラメータ USER プロパティ 説明 デフォルト値 なし 用途 スキャンする表の所有者を指定します。 USER パラメータを指定すると、指定した所有者に属しているすべての表がスキャンされま す。たとえば、次の文を使用すると、HR に属しているすべての表がスキャンされます。 CSSCAN system/manager USER=hr ... USERID プロパティ 説明 デフォルト値 なし 用途 データベースをスキャンするユーザーのユーザー名とパスワード (およびオプションの接続文字列)を指定します。パスワードを省 略すると、パスワードの入力を求められます。 次の書式はすべて有効です。 username/password username/password@connect_string username username@connect_string 12-22 Oracle Database グローバリゼーション・サポート・ガイド Database Character Set Scanner セッション : 例 Database Character Set Scanner セッション : 例 次の例は、コマンドラインおよびパラメータ・ファイルを使用して、全データベース、ユー ザーおよび表の各スキャン・モードを使用する方法を示しています。 全データベース・スキャン : 例 次の例は、データベースを AL32UTF8 に移行する場合の影響を調べるために、全データベー スをスキャンする方法を示しています。この例では、現行のデータベース・キャラクタ・ セットが WE8ISO8859P1 であるとします。 例 : パラメータ・ファイルによる方法 % csscan system/manager parfile=param.txt param.txt ファイルには、次の情報が記述されています。 full=y tochar=al32utf8 array=4096000 process=4 例 : コマンドラインによる方法 % csscan system/manager full=y tochar=al32utf8 array=4096000 process=4 Database Character Set Scanner メッセージ scan.out ファイルは、どの表がスキャンされたかを示します。レポートのデフォルト・ ファイル名は、LOG パラメータを使用して変更できます。 関連項目 : 12-18 ページ「LOG」 Database Character Set Scanner v2.0 : Release 10.1.0.0.0 - Production (c) Copyright 2003 Oracle Corporation. All rights reserved. Connected to: Oracle Database 10g Enterprise Edition Release 10.1.0.0.0 With the Partitioning and Oracle Data Mining options JServer Release 10.1.0.0.0 - Development Enumerating tables to scan... . process 1 scanning SYS.SOURCE$[AAAABHAABAAAAJqAAA] . process 2 scanning SYS.TAB$[AAAAACAABAAAAA0AAA] . process 2 scanning SYS.CLU$[AAAAACAABAAAAA0AAA] Character Set Scanner ユーティリティ 12-23 Database Character Set Scanner セッション : 例 . . . . . . . . . . process process process process process 2 2 1 1 1 scanning scanning scanning scanning scanning SYS.ICOL$[AAAAACAABAAAAA0AAA] SYS.COL$[AAAAACAABAAAAA0AAA] SYS.IND$[AAAAACAABAAAAA0AAA] SYS.TYPE_MISC$[AAAAACAABAAAAA0AAA] SYS.LOB$[AAAAACAABAAAAA0AAA] process 1 scanning IX.AQ$_ORDERS_QUEUETABLE_G process 2 scanning IX.AQ$_ORDERS_QUEUETABLE_I Creating Database Scan Summary Report... Creating Individual Exception Report... Scanner terminated successfully. ユーザー・スキャン : 例 次の例は、ユーザー表を AL32UTF8 に移行する場合の影響を調べるために、ユーザー表をス キャンする方法を示しています。この例では、現行のデータベース・キャラクタ・セットは US7ASCII であるが、格納されている実際のデータは西ヨーロッパの WE8MSWIN1252 エン コーディングであると仮定しています。 例 : パラメータ・ファイルによる方法 % csscan system/manager parfile=param.txt param.txt ファイルには、次の情報が記述されています。 user=hr fromchar=we8mswin1252 tochar=al32utf8 array=4096000 process=1 例 : コマンドラインによる方法 % csscan system/manager user=hr fromchar=we8mswin1252 tochar=al32utf8 array=4096000 process=1 12-24 Oracle Database グローバリゼーション・サポート・ガイド Database Character Set Scanner セッション : 例 Database Character Set Scanner メッセージ scan.out ファイルは、どの表がスキャンされたかを示します。 Database Character Set Scanner v2.0: Release 10.1.0.0 - Production (c) Copyright 2003 Oracle Corporation. All rights reserved. Connected to: Oracle Database 10g Enterprise Edition Release 10.1.0.0 - Production With the Objects option PL/SQL Release 10.1.0.0 - Production Enumerating tables to scan... . . . . process process process process 1 1 1 1 scanning scanning scanning scanning HR.JOBS HR.DEPARTMENTS HR.JOB_HISTORY HR.EMPLOYEES Creating Database Scan Summary Report... Creating Individual Exception Report... Scanner terminated successfully. 単一表のスキャン : 例 次の例は、単一表を WE8MSWIN1252 に移行する場合の影響を調べるために、単一表をス キャンする方法を示しています。この例では、現行のデータベース・キャラクタ・セットは US7ASCII であると仮定しています。LOSSY データ・セルに対して言語およびキャラクタ・ セット検出が実行されます。 例 : パラメータ・ファイルによる方法 % csscan system/manager parfile=param.txt param.txt ファイルには、次の情報が記述されています。 table=hr.employees tochar=we8mswin1252 array=4096000 process=1 suppress=100 lcsd=y Character Set Scanner ユーティリティ 12-25 Database Character Set Scanner レポート 例 : コマンドラインによる方法 % csscan system/manager table=hr.employees tochar=we8mswin1252 array=4096000 process=1 supress=100 lcsd=y Database Character Set Scanner メッセージ scan.out ファイルは、どの表がスキャンされたかを示します。 Database Character Set Scanner v2.0: Release 10.1.0.0 - Production (c) Copyright 2003 Oracle Corporation. All rights reserved. Connected to: Oracle Database 10g Enterprise Edition Release 10.1.0.0 - Production With the Objects option PL/SQL Release 10.1.0.0 - Production . process 1 scanning HR.EMPLOYEES Creating Database Scan Summary Report... Creating Individual Exception Report... Scanner terminated successfully. Database Character Set Scanner レポート Database Character Set Scanner では、スキャンごとに次の 2 つのレポートが生成されます。 ■ データベース・スキャンのサマリー・レポート ■ データベース・スキャンの個別例外レポート データベース・スキャンのサマリー・レポートは、scan.txt ファイルに生成されます。 データベース・スキャンの個別例外レポートは、scan.err ファイルに生成されます。 レポートのデフォルト・ファイル名は、LOG パラメータを使用して変更できます。 関連項目 : 12-18 ページ「LOG」 12-26 Oracle Database グローバリゼーション・サポート・ガイド Database Character Set Scanner レポート データベース・スキャンのサマリー・レポート scan.txt ファイルには、データベース・スキャンのサマリー・レポートが記述されます。 次の出力は、レポート・ヘッダーの例を示しています。この項には、各スキャン・プロセス の実行日時が記述されます。 Database Scan Summary Report Time Started : 2002-12-16 20:35:56 Time Completed: 2002-12-16 20:37:31 Process ID Time Started Time Completed ---------- -------------------- -------------------1 2002-12-16 20:36:07 2002-12-16 20:37:30 2 2002-12-16 20:36:07 2002-12-16 20:37:30 ---------- -------------------- -------------------- レポートは、次の項で構成されます。 ■ データベース・サイズ ■ データベース・スキャン・パラメータ ■ スキャン・サマリー ■ データ・ディクショナリの変換サマリー ■ アプリケーション・データの変換サマリー ■ 列サイズ境界ごとのアプリケーション・データの変換サマリー ■ 表ごとの変換可能データの分散状態 ■ 列ごとの変換可能データの分散状態 ■ 再構築対象の索引 ■ キャラクタ・セマンティクスによる切捨て 各項に出力される情報は、選択したスキャンのタイプおよびパラメータによって異なりま す。 Character Set Scanner ユーティリティ 12-27 Database Character Set Scanner レポート データベース・サイズ この項では、現行のデータベース・サイズがレポートされ、キャラクタ・セット移行後に可 能性のあるデータ拡張量が識別されます。 次に出力例を示します。 Tablespace Used Free Total Expansion ------------------------- --------------- --------------- --------------- --------------SYSTEM 206.63M 143.38M 350.00M 588.00K SYSAUX 8.25M 131.75M 140.00M .00K ------------------------- --------------- --------------- --------------- --------------Total 214.88M 275.13M 490.00M 588.00K The size of the largest CLOB is 57370 bytes データベース・スキャン・パラメータ この項には、選択したパラメータおよびスキャンのタイプが記述されます。次に出力例を示 します。 Parameter -----------------------------CSSCAN Version Instance Name Database Version Scan type Scan CHAR data? Database character set FROMCHAR TOCHAR Scan NCHAR data? Array fetch buffer size Number of processes Capture convertible data? Charset Language Detections Charset Language Parameter ------------------------------ Value -----------------------------------------------v2.0 rdbms06 10.1.0.0.0 Full database YES WE8ISO8859P1 WE8ISO8859P1 AL32UTF8 NO 102400 2 NO Yes LOSSY ------------------------------------------------ 12-28 Oracle Database グローバリゼーション・サポート・ガイド Database Character Set Scanner レポート スキャン・サマリー この項には、データベース・キャラクタ・セット移行の実現可能性が示されます。データ ベースのキャラクタ・セット移行の実現可能性を判断する基本的な規準は 2 つあります。1 つはデータ・ディクショナリの状態で、もう 1 つはアプリケーション・データの状態です。 関連項目 : 12-43 ページ「Database Character Set Scanner の CSALTER ス クリプト」 スキャン・サマリー・セクションは、次の 2 つのステータス行で構成されています。1 つは データ・ディクショナリの状態で、もう 1 つはアプリケーション・データの状態です。 スキャン・サマリーからのサンプル出力を次に示します。 All character type data in the data dictionary are convertible to the new character set Some character type application data are not convertible to the new character set 表 12-1 に、データ・ディクショナリとアプリケーション・データに関してレポートできるス テータスのタイプを示します。 表 12-1 データ・ディクショナリとアプリケーション・データに可能なステータス データ・ディクショナリのステータス アプリケーション・データのステータス データ・ディクショナリ内のキャラクタ・タイプ・データ はすべて、新規キャラクタ・セットでも変わりません。 キャラクタ・タイプのアプリケーション・データは すべて、新規キャラクタ・セットでも変わりません。 データ・ディクショナリ内のキャラクタ・タイプ・データ はすべて、新規キャラクタ・セットに変換できます。 キャラクタ・タイプのアプリケーション・データは すべて、新規キャラクタ・セットに変換できます。 データ・ディクショナリ内のキャラクタ・タイプ・データ の一部は、新規キャラクタ・セットに変換できません。 キャラクタ・タイプのアプリケーション・データの 一部は、新規キャラクタ・セットに変換できません。 すべてのデータが新規キャラクタ・セットでも変わらない場合は、変換元キャラクタ・セッ トのエンコーディング値が、変換先キャラクタ・セットでも同一であることを意味します。 たとえば、ASCII データは、WE8ISO8859P1 でも AL32 UTF8 でも同じバイナリ値を使用し て格納されます。この場合、データベース・キャラクタ・セットは CSALTER スクリプトを 使用して移行できます。 すべてのデータが新規キャラクタ・セットに変換できる場合、データベースは Export Utility と Import Utility を使用して安全に移行できます。ただし、移行後データのエンコー ディング値は、変換先キャラクタ・セットでは異なる値になります。 Character Set Scanner ユーティリティ 12-29 Database Character Set Scanner レポート 関連項目 : ■ ■ ■ 変換不可能なデータの詳細は、12-35 ページの「データベース・ス キャンの個別例外レポート」を参照してください。 11-9 ページ「CSALTER スクリプトを使用したキャラクタ・セットの 移行」 11-8 ページ「全体エクスポートおよび全体インポートを使用した文字 データの移行」 データ・ディクショナリの変換サマリー この項には、データ・ディクショナリのデータの変換に関する統計情報が記述されます。各 種ステータスのデータ・セルの数がデータ型別にレポートされます。データ・ディクショナ リの変換サマリーは、全データベース・スキャンが実行される場合にのみ使用可能です。 表 12-2 に、データ・セルのステータスに可能なタイプを示します。 表 12-2 データに可能なステータス ステータス 説明 Changeless データは新規キャラクタ・セットでも変わりません。 Convertible データ・セルは新規キャラクタ・セットに正常に変換できます。 Truncation 変換時にデータが切り捨てられます。 Lossy 変換時に文字データが失われます。 次に出力例を示します。 Datatype Changeless Convertible Truncation Lossy --------------------- ---------------- ---------------- ---------------- ---------------VARCHAR2 1,214,557 0 0 0 CHAR 967 0 0 0 LONG 88,657 0 0 0 CLOB 138 530 0 0 VARRAY 18 0 0 0 --------------------- ---------------- ---------------- ---------------- ---------------Total 1,304,337 530 0 0 Total in percentage 99.959% 0.041% 0.000% 0.000% The data dictionary can be safely migrated using the CSALTER script. Convertible、Truncation および Lossy 列に記録されたデータ・セルの数が 0(ゼロ) の場合は、データ・ディクショナリをそのまま FROMCHAR キャラクタ・セットから TOCHAR キャラクタ・セットに移行でき、データ変換は必要ありません。 12-30 Oracle Database グローバリゼーション・サポート・ガイド Database Character Set Scanner レポート Truncation および Lossy 列の数値がすべて 0(ゼロ)で、Convertible 列に 0(ゼロ) 以外の数値がある場合は、データ・ディクショナリのすべてのデータが新規キャラクタ・ セットに変換できることを意味します。ただし、データベースへの影響を理解していない場 合、データ・ディクショナリのデータを変換するのは危険です。CSALTER スクリプトを使 用すると、データ・ディクショナリ内で変換可能な一部のセルを変換できます。変換サマ リー表に続くメッセージは、この変換を CSALTER スクリプトでサポートできるかどうかを 示します。 Lossy 列の数値が 0(ゼロ)以外の場合は、データ・ディクショナリに変換できないデータ があります。したがって、現行データベースの新規キャラクタへの移行は実現しません。こ れは、エクスポートとインポートのプロセスではデータを新規キャラクタ・セットに変換で きないためです。たとえば、表名に無効な文字が使用されていたり、新規キャラクタ・セッ トにマップできないデータが PL/SQL プロシージャのコメント行に含まれている場合があり ます。スキーマ・オブジェクトに対するこのような変更は、新規キャラクタ・セットへの移 行前に、手動で訂正する必要があります。 Truncation 列の数値が 0(ゼロ)以外の場合は、エクスポートおよびインポート・プロセ スによりデータが切り捨てられます。 関連項目 : ■ ■ 12-43 ページ「Database Character Set Scanner の CSALTER スクリプ ト」 12-38 ページ「データ・ディクショナリ内の変換可能データまたは不 可逆データを処理する方法」 アプリケーション・データの変換サマリー この項には、アプリケーション・データの変換サマリーの統計情報が記述されます。各種ス テータスのデータ・セルの数がデータ型別にレポートされます。表 12-2 に、レポートできる ステータスのタイプを示します。 次に出力例を示します。 Datatype Changeless Convertible Truncation Lossy --------------------- ---------------- ---------------- ---------------- ---------------VARCHAR2 37,757 3 0 0 CHAR 6,404 0 0 0 LONG 4 0 0 0 CLOB 23 20 0 1 VARRAY 319 0 0 0 --------------------- ---------------- ---------------- ---------------- ---------------Total 44,507 23 0 1 Total in percentage 99.946% 0.051% 0% 0.002% Character Set Scanner ユーティリティ 12-31 Database Character Set Scanner レポート 列サイズ境界ごとのアプリケーション・データの変換サマリー この項には、CHAR および VARCHAR2 のアプリケーション・データの変換サマリーが記述さ れます。各種ステータスのデータ・セルの数は、BOUNDARIES パラメータで指定した列サイ ズ境界別にレポートされます。表 12-2 に、使用可能なステータスのタイプを示します。 この情報は、BOUNDARIES パラメータが指定されている場合にのみ使用可能です。 次に出力例を示します。 Datatype Changeless Convertible Truncation Lossy --------------------- ---------------- ---------------- ---------------- ---------------VARCHAR2(1..30) 28,702 2 0 0 VARCHAR2(31..4000) 9,055 1 0 0 --------------------- ---------------- ---------------- ---------------- ---------------CHAR(1..30) 6,404 0 0 0 CHAR(31..4000) 0 0 0 0 --------------------- ---------------- ---------------- ---------------- ---------------Total 44,161 3 0 0 表ごとの変換可能データの分散状態 次の項は、Convertible、Truncation および Lossy データがデータベース内にどのよう に分散しているかを示します。統計は、表別にレポートされます。リストに数行のみ表示さ れている場合、Convertible データは局所的に集中しています。リストに多数の行が表示 されている場合、Convertible データはデータベース全体に分散しています。 次に出力例を示します。 USER.TABLE Convertible Truncation Lossy ---------------------------- ---------------- ---------------- ---------------HR.EMPLOYEES 1 0 0 OE.CUSTOMERS 2 0 0 PM.ONLINE_MEDIA 13 0 0 PM.PRINT_MEDIA 7 0 1 SYS.EXTERNAL_TAB$ 1 0 0 SYS.METASTYLESHEET 80 0 0 ---------------------------- ---------------- ---------------- ---------------- 12-32 Oracle Database グローバリゼーション・サポート・ガイド Database Character Set Scanner レポート 列ごとの変換可能データの分散状態 次の項は、Convertible、Truncation および Lossy データがデータベース内にどのよう に分散しているかを示します。統計は、列別にレポートされます。次に出力例を示します。 USER.TABLE|COLUMN Convertible Truncation Lossy ------------------------------------- ---------------- ---------------- ---------------HR.EMPLOYEES|FIRST_NAME 1 0 0 OE.CUSTOMERS|CUST_EMAIL 1 0 0 OE.CUSTOMERS|CUST_FIRST_NAME 1 0 0 PM.ONLINE_MEDIA|SYS_NC00042$ 6 0 0 PM.ONLINE_MEDIA|SYS_NC00062$ 7 0 0 PM.PRINT_MEDIA|AD_FINALTEXT 3 0 1 PM.PRINT_MEDIA|AD_SOURCETEXT 4 0 0 SYS.EXTERNAL_TAB$|PARAM_CLOB 1 0 0 SYS.METASTYLESHEET|STYLESHEET 80 0 0 ------------------------------------- ---------------- ---------------- ---------------- 再構築対象の索引 データベース・キャラクタ・セットの移行によって影響を受ける全索引のリストが生成され ます。これらの索引は、データのインポート後に再作成できます。次に出力例を示します。 USER.INDEX on USER.TABLE(COLUMN) ----------------------------------------------------------------------------------------HR.EMP_NAME_IX on HR.EMPLOYEES(FIRST_NAME) HR.EMP_NAME_IX on HR.EMPLOYEES(LAST_NAME) OE.CUST_EMAIL_IX on OE.CUSTOMERS(CUST_EMAIL) ----------------------------------------------------------------------------------------- キャラクタ・セマンティクスによる切捨て この項は、キャラクタ・セマンティクスを使用して定義されている列にのみ適用されます。 この項では、データベース・キャラクタ・セットが CSALTER スクリプトで更新される前に、 変換先キャラクタ・セットに(SQL CONVERT 関数または他のインライン変換プロセスなど により)変換された場合に切り捨てられるデータ・セルの数が識別されます。データベー ス・キャラクタ・セットの変更後にデータ変換が発生する場合は、この項を無視してかまい ません。 たとえば、WE8MSWIN1252 データベースの VARCHAR2(5 char) 列には、5 バイトを使用 して最大 5 文字を格納できます。これらの文字が AL32UTF8 に移行されると、同じ 5 文字が 長さ最大 15 バイトまで拡張する可能性があります。列に割り当てられる物理バイト制限は 現行のデータベース・キャラクタ・セットにより決定されるため、データを変換先キャラク タ・セットで変換する前に、この列を手動で 15 バイトに拡張する必要があります。または、 データベース・キャラクタ・セットの変更後に、この列にキャラクタ・セット変換を適用で きます。この場合は、同じ VARCHAR2(5 char) 定義で自動的に 15 バイトが割り当てられ、 特殊処理は必要ありません。 Character Set Scanner ユーティリティ 12-33 Database Character Set Scanner レポート 次に、レポートのキャラクタ・セマンティクスによる切捨てセクションの出力例を示しま す。 USER.TABLE|COLUMN Truncation -------------------------------------------------- ---------------HR.EMPLOYEES|FIRST_NAME 1 キャラクタ・セット検出結果 この項は、LCSD パラメータで言語およびキャラクタ・セット検出がオンになっている場合 に出力されます。この項には、Database Character Set Scanner で検出されたキャラクタ・ セットのリストが表示されます。キャラクタ・セットは出現順です。NUMBER は、データ・ セル数です。 次に、キャラクタ・セット検出結果セクションの出力例を示します。 CHARACTER SET NUMBER PERCENTAGE ------------------------------ ---------------- ---------------WE8MSWIN1252 38 97.436% UNKNOWN 1 2.564% ------------------------------ ---------------- ---------------- 言語検出結果 この項は、LCSD パラメータで言語およびキャラクタ・セット検出がオンになっている場合 に出力されます。この項には、Database Character Set Scanner で検出された言語のリストが 表示されます。言語は出現順です。 次に、言語検出結果セクションの出力例を示します。 LANGUAGE NUMBER PERCENTAGE ------------------------------ ---------------- ---------------ENGLISH 36 92.308% FRENCH 2 5.128% UNKNOWN 1 2.564% ------------------------------ ---------------- ---------------- 12-34 Oracle Database グローバリゼーション・サポート・ガイド Database Character Set Scanner レポート データベース・スキャンの個別例外レポート scan.err ファイルには、個別例外レポートが記述されます。このレポートは、次のサマリー で構成されています。 ■ データベース・スキャン・パラメータ ■ データ・ディクショナリの個別例外 ■ アプリケーション・データ個別例外 データベース・スキャン・パラメータ この項には、選択したパラメータおよびスキャンのタイプが記述されます。次に出力例を示 します。 Parameter -----------------------------CSSCAN Version Instance Name Database Version Scan type Scan CHAR data? Database character set FROMCHAR TOCHAR Scan NCHAR data? Array fetch buffer size Number of processes Capture convertible data? Charset Language Detection Charset Language Parameter ------------------------------ Value -----------------------------------------------v2.0 rdbms06 10.1.0.0.0 Full database YES WE8ISO8859P1 WE8ISO8859P1 AL32UTF8 NO 102400 2 NO Yes LOSSY ------------------------------------------------ データ・ディクショナリの個別例外 この項には、データ・ディクショナリのデータが変換可能であるか、または例外があるかが レポートされます。例外には 2 つのタイプがあります。 ■ 列サイズの超過 (exceed column size) ■ 非可逆式変換 (lossy conversion) 次に、変換可能なデータを含むデータ・ディクショナリに関する出力例を示します。 User : SYS Table : OBJ$ Column: NAME Type : VARCHAR2(30) Number of Exceptions : 0 Character Set Scanner ユーティリティ 12-35 Database Character Set Scanner レポート Max Post Conversion Data Size: 30 ROWID -----------------AAAAASAABAAAikLAAQ ------------------ Exception Type Size Cell Data(first 30 bytes) ------------------ ----- -----------------------------convertible Aufträge ------------------ ----- ------------------------------ 関連項目 : ■ ■ 例外の詳細は、12-36 ページの「アプリケーション・データ個別例外」 を参照してください。 12-38 ページ「データ・ディクショナリ内の変換可能データまたは不 可逆データを処理する方法」 アプリケーション・データ個別例外 このレポートには、例外があるデータが示されるため、必要に応じて該当データを修正でき ます。 例外には 2 つのタイプがあります。 ■ 列サイズの超過 (exceed column size) 最大列幅を超過している場合は、列サイズを拡張する必要があります。列サイズを拡張 しないと、データの切捨てが発生します。 ■ 非可逆式変換 (lossy conversion) 新規キャラクタ・セットへの移行前にデータを訂正する必要があります。データを訂正 しないと、無効な文字が置換文字に変換されます。置換文字は通常、? または ¿、あるい はソース文字と言語的に同様の文字です。 次の個別例外レポートの例では、データベース・キャラクタ・セットを WE8ISO8859P1 か ら AL32UTF に変更するときに発生する可能性があるいくつかの問題が示されています。 User: USER1 Table: TEST Column: NAME Type: VARCHAR2(10) Number of Exceptions: 2 Max Post Conversion Data Size: 11 ROWID -----------------AAAA2fAAFAABJwQAAg AAAA2fAAFAABJwQAAu AAAA2fAAFAABJwQAAu ------------------ Exception Type Size Cell Data(first 30 bytes) ------------------ ----- -----------------------------exceed column size 11 Ährenfeldt lossy conversion órâclë8™ exceed column size 11 órâclë8™ ------------------ ----- ------------------------------ 12-36 Oracle Database グローバリゼーション・サポート・ガイド Database Character Set Scanner レポート 値 Ährenfeldt および órâclë8™ は、列サイズ(10 バイト)を超過しています。これは、 Ä、ó、â および ë の各文字が、WE8ISO8859P1 では 1 バイトですが AL32UTF8 では 2 バイト であるためです。値 órâclë8™ は、商標記号 ™(コード 153)が有効な WE8ISO8859P1 文字 ではないことに起因する AL32UTF8 への不可逆変換です。この文字は、WE8ISO8859P1 の スーパーセットである WE8MSWIN1252 の文字です。 SELECT 文を発行すると、例外があるデータを表示できます。 SELECT name FROM user1.test WHERE ROWID='AAAA2fAAFAABJwQAAu'; UPDATE 文を発行すると、例外があるデータを修正できます。 UPDATE user1.test SET name = 'Oracle8 TM' WHERE ROWID='AAAA2fAAFAABJwQAAu'; 言語およびキャラクタ・セット検出オプションが有効化されている場合、CSSCAN は LCSDDATA パラメータで指定されたデータ・セルについて最も可能性の高い言語およびキャ ラクタ・セットの提供を試みます。 次に、個別例外レポートの出力例を示します。このレポートは、データベース・キャラク タ・セットを US7ASCII から AL32UTF8 に変更する場合の、不可逆データ・セルに関する言 語およびキャラクタ・セット検出の結果を示しています。 User: USER2 Table: TEST Column: NAME Type: VARCHAR2(30) Number of Exceptions: 2 Max Post Conversion Data Size: 11 ROWID Exception Type Size Cell Data(first 30 bytes) Language & Character Set ------------------ ------------------ ----- --------------------------- -----------------------AAAA2fAAFAABJwQAAt lossy conversion C'est français (French,UTF8) AAAA2fAAFAABJwQAAu lossy conversion Ciò è italiana (Italian,WE8MSWIN1252) ------------------ ------------------ ----- --------------------------- ------------------------ 関連項目 : ■ 11-2 ページ「データの切捨て」 ■ 11-4 ページ「キャラクタ・セット変換の問題」 Character Set Scanner ユーティリティ 12-37 データ・ディクショナリ内の変換可能データまたは不可逆データを処理する方法 データ・ディクショナリ内の変換可能データまたは不可逆 データを処理する方法 ユーザー・アプリケーションのデータ変更とは異なり、データ・ディクショナリ表の内容を 直接更新したり変更する操作はサポートされません。内部の依存性を把握せずにシステム表 を更新すると、データベースが破損する可能性があります。 データ・ディクショナリが変換可能な場合、データ・セルは FROMCHAR キャラクタ・セット でエンコードされます。データ・ディクショナリに変換可能なデータがある場合について は、次の 2 つの一般的な使用例があります。 ■ データ・ディクショナリ内の CLOB データの場合 シングルバイト・キャラクタ・セットの場合、CLOB データはデータベース・キャラク タ・セットのエンコーディングで格納されます。マルチバイト・キャラクタ・セットの 場合、CLOB データは UCS-2 互換の内部 Oracle 形式で格納されます。たとえば、 US7ASCII データベースの VARCHAR2 列に格納されている文字列 ABC のバイト表現は、 AL32UTF8 に移行後も変わりません。CLOB 列に格納されている同じ文字列のサイズは 2 倍であり、格納方法もまったく異なります。シングルバイト・キャラクタ・セットか らマルチバイト・キャラクタ・セットに移行する場合、CLOB データが CHANGELESS に なることはありません。 ■ データベースをキャラクタ・セットに移行するが、そのキャラクタ・セットは変換元 キャラクタ・セットの文字をすべて含むスーパーセットであり、一部の文字のバイナリ 値が 2 つのキャラクタ・セット間で異なる場合 これは、データ・セルを新規キャラクタ・セットに手動で変換する必要のあるユー ザー・アプリケーション・データの場合に似ています。この操作の一般的な原因は、 ユーザーのオブジェクト定義(表名、列名、パッケージ名およびパッケージ本体など) の作成に、ASCII 以外の文字が使用されていることです。通常、これらはユーザーのネ イティブ言語に含まれる文字または記号です。 変換可能なデータ・ディクショナリのデータを移行する場合に最も簡単なアプローチは、変 換先キャラクタ・セットで新規データベースを作成してから、エクスポートとインポートに よりデータ・ディクショナリおよびスキーマ定義をすべて再作成することです。ただし、こ の方法では新規データベースを作成することになります。 新規データベースを作成するかわりに既存のデータベースを移行する場合、データ・ディク ショナリ内の変換可能な CLOB データを移行し、既存のデータベース・キャラクタ・セット を変換先キャラクタ・セットに変更するには、CSALTER スクリプトを使用するのが最も簡 単な方法です。 関連項目 : 12-43 ページ「Database Character Set Scanner の CSALTER ス クリプト」 12-38 Oracle Database グローバリゼーション・サポート・ガイド データ・ディクショナリ内の変換可能データまたは不可逆データを処理する方法 データ・ディクショナリのうち CLOB データでない CONVERTIBLE データ・セルの場合は、 変換可能なデータを含むスキーマ・オブジェクトを検索する必要があります。これにより、 次のいずれかの操作を選択できます。 ■ ■ データ・セルが CHANGELESS になるように、オブジェクト定義を修正します(たとえ ば、パッケージ本体のコメントから ASCII 以外の文字を削除します) 。 これらのオブジェクトをデータベース・スキーマからまとめて削除し、データベース・ キャラクタ・セットを変換先キャラクタ・セットに移行した後で再作成します。 LOSSY ディクショナリ・データ・セルについては、さらにデータ・ディクショナリを検査 し、現行の FROMCHAR キャラクタ・セットがデータベースの実際のキャラクタ・セットかど うかを確認する必要があります。データベースの実際のキャラクタ・セットであれば、これ らのオブジェクト定義を訂正する必要があります(たとえば、パッケージ本体のコメントか ら問題の文字を削除します) 。これにより、データ・セルが CHANGELESS となり、変換先 キャラクタ・セットに安全に移行できます。 データ・ディクショナリ内で CONVERTIBLE データ・セルと LOSSY データ・セルを検索で きるように、Database Character Set Scanner には次の 3 つの SQL スクリプトが付属してい ます。 ■ analyze_source.sql ■ analyze_histgrm.sql ■ analyze_rule.sql 各スクリプトは $ORACLE_HOME/nls/csscan/sql ディレクトリに格納されています。こ れらのスクリプトでは、問題のデータ・ディクショナリ・オブジェクトを識別できるよう に、SYS.SOURCE$、SYS.HISTGRM$ および SYS.RULE$ データ・ディクショナリ表に対し て SQL SELECT 操作が実行されます。 次に、analyze_source.sql スクリプトの出力例を示します。 SQL> @$ORACLE_HOME/nls/csscan/sql/analyze_source.sql Table: SYS.SOURCE$ Error: CONVERTIBLE DATA no rows selected Table: SYS.SOURCE$ Error: EXCEPTIONAL DATA OWNER OBJECT_NAME ----------- -------------SCOTT FOO OBJECT_TYPE ------------FUNCTION EXCEPTIONAL ----------1 Character Set Scanner ユーティリティ 12-39 Database Character Set Scanner の記憶域とパフォーマンスに関する考慮事項 Database Character Set Scanner の記憶域とパフォーマンスに関する 考慮事項 この項では、Database Character Set Scanner の記憶域とパフォーマンスに関する問題につい て説明します。この章の内容は、次のとおりです。 ■ Database Character Set Scanner の記憶域に関する考慮事項 ■ Database Character Set Scanner のパフォーマンスに関する考慮事項 ■ Database Character Set Scanner に関する推奨事項と制限事項 Database Character Set Scanner の記憶域に関する考慮事項 この項では、Database Character Set Scanner のシステム表のサイズと拡張について説明し、 それらをメンテナンスする方法について説明します。データベースに格納されているデータ の性質に応じて、急速に増大する可能性があるシステム表が 3 つあります。 csminst.sql スクリプトを修正すると、ユーザー CSMIG に大きい表領域を割り当てるこ とができます。デフォルトでは、SYSTEM 表領域がユーザー CSMIG に割り当てられます。 この項の内容は、次のとおりです。 ■ CSM$TABLES ■ CSM$COLUMNS ■ CSM$ERRORS CSM$TABLES スキャンする必要があるすべての表が、CSM$TABLES 表に列挙されます。 次の SQL 文を発行すると、データベース内の表の数を調べる(CSM$TABLES がどの程度大 きくなるかの見積りを取得する)ことができます。 SELECT COUNT(*) FROM DBA_TABLES; CSM$COLUMNS スキャンされた各列の統計情報が、CSM$COLUMNS 表に格納されます。 次の SQL 文を発行すると、データベース内の文字列型の列の数を調べる(CSM$COLUMNS が どの程度大きくなるかの見積りを取得する)ことができます。 SELECT COUNT(*) FROM DBA_TAB_COLUMNS WHERE DATA_TYPE IN ('CHAR', 'VARCHAR2', 'LONG', 'CLOB', 'VARRAY'); 12-40 Oracle Database グローバリゼーション・サポート・ガイド Database Character Set Scanner の記憶域とパフォーマンスに関する考慮事項 CSM$ERRORS セル・データで例外が検出されると、個々の例外情報が CSM$ERRORS 表に挿入されます。 この情報は個別例外レポートに表示され、必要に応じて修正するレコードの識別に役立ちま す。 データベースに Exceptional または Convertible(パラメータ CAPTURE=Y が設定され ている場合)の印が付いたデータが多数含まれている場合は、CSM$ERRORS 表が極端に大き くなる可能性があります。SUPPRESS パラメータを使用すると、CSM$ERRORS 表が不必要に 増大することを防止できます。 SUPPRESS パラメータはすべての表に適用されます。指定した数の例外が挿入された後は、 個々の Exceptional 情報の挿入が抑制されます。記録される例外数を制限しても、例外が 異なる表に散在している場合は役に立たない可能性があります。 Database Character Set Scanner のパフォーマンスに関する考慮事項 この項では、データベース・スキャン時のパフォーマンスを向上させる方法を説明します。 マルチ・スキャン・プロセスの使用 比較的大規模なデータベース(50GB 以上のデータベースなど)のスキャンを計画している 場合は、マルチ・スキャン・プロセスの利用を考慮できます。マルチ・スキャン・プロセス を使用すると、マシンで使用可能な CPU やメモリーなどのハードウェア・リソースを使用 することによって、データベース・スキャンの継続時間が短縮されます。使用するスキャ ン・プロセスの数を判断するためのガイドラインは、CPU_COUNT 初期化パラメータ値と同 じ値に設定することです。 配列フェッチ・バッファ・サイズの設定 配列フェッチを許可すると、1 回に複数行がフェッチされます。通常は、大きなサイズの配 列フェッチ・バッファを使用すると、パフォーマンスを改善できます。各プロセスでは、独 自のフェッチ・バッファが割り当てられます。 例外および変換可能ログの抑制 Exceptional および Convertible(CAPTURE=Y の場合)の個別情報は、CSM$ERRORS 表に挿入されます。通常、CSM$ERRORS 表への挿入は、データ・フェッチよりもリソースを 消費します。データベースに Exceptional または Convertible の印が付いたデータが多 数あると、多数の挿入文が発行されるため、パフォーマンスが低下します。SUPPRESS パラ メータを使用して、記録する例外行の数に制限を設定することをお薦めします。 Character Set Scanner ユーティリティ 12-41 Database Character Set Scanner の記憶域とパフォーマンスに関する考慮事項 Database Character Set Scanner に関する推奨事項と制限事項 CHAR、VARCHAR2、LONG、CLOB および VARRAY 列の文字ベースのデータはすべて、データ ベース・キャラクタ・セットに格納されます。このキャラクタ・セットは、データベースを 最初に作成したときに、CREATE DATABASE 文で指定したデータベース・キャラクタ・セッ トです。ただし、構成によっては、意図的にまたは意図せずに、データベース・キャラク タ・セットと異なるキャラクタ・セットにデータを格納する可能性があります。これは、 NLS_LANG キャラクタ・セットがデータベース・キャラクタ・セットと同一の場合に最もよ く発生します。これは、Oracle がデータを変換または検証の保証なしにそのまま送受信する ためです。また、2 つのキャラクタ・セットの一方が他方のスーパーセットである場合にも 発生します。この状況では、コード・ポイントの大部分が変換されない場合と同様に表示さ れます。たとえば、NLS_LANG が WE8ISO8859P1 に設定されていて、データベース・キャ ラクタ・セットが WE8MSWIN1252 の場合は、クライアント / サーバー変換を実行しても、 128 ~ 159 の範囲以外のすべてのコード・ポイントが保持されます。 同じバイナリ・コード・ポイント値を使用して、様々なキャラクタ・セット間で異なる文字 を表すことができます。ほとんどのヨーロッパ言語のキャラクタ・セットは、8 ビット範囲 の自由な使用を共有してネイティブ文字をエンコードするため、不適切な理由でセルが互換 性ありとレポートされる可能性が高くなります。FROMCHAR パラメータを設定する場合、す べての文字データがキャラクタ・セットでエンコードされていても、Database Character Set Scanner では妥当性を正確に判断できないものとみなすことになります。 たとえば、FROMCHAR パラメータを WE8MSWIN1252 に設定して Database Character Set Scanner を使用すると、この問題が発生する可能性があります。このシングルバイト・キャ ラクタ・セットは、使用可能なすべてのコード・ポイントで文字をエンコードするため、ス キャン対象がどのようなデータであっても、スキャナは常にデータ・セルを変換元キャラク タ・セットで使用可能と識別します。 データベース・キャラクタ・セットにないデータを含むデータベースの スキャン データベースにデータベース・キャラクタ・セットにないデータが含まれていても、別の キャラクタ・セットでエンコードされており、エンコードされたキャラクタ・セットが FROMCHAR パラメータで指定されている場合は、Database Character Set Scanner でスキャン を実行できます。 2 つ以上のキャラクタ・セットからのデータを含むデータベースの スキャン データベースに複数のキャラクタ・セットからのデータが含まれている場合、Database Character Set Scanner では、1 回のスキャンではデータベース・キャラクタ・セットの変更 による影響を正確にテストできません。データを各キャラクタ・セットに対して 1 つずつ、 別個の表に分割できる場合、Database Character Set Scanner では複数の表スキャンを実行し てデータの妥当性を検証できます。 12-42 Oracle Database グローバリゼーション・サポート・ガイド Database Character Set Scanner の CSALTER スクリプト スキャンごとに、異なる値の FROMCHAR パラメータを使用し、指定したキャラクタ・セット にある場合と同様に、表内のターゲット列すべてを処理するように、Database Character Set Scanner に対して指示できます。 Database Character Set Scanner の CSALTER スクリプト CSALTER スクリプトは、特殊なキャラクタ・セット移行処理のための DBA ツールです。 廃止になった ALTER DATABASE CHARACTER SET SQL 文と同様に、CSALTER は、システ ム管理者のみが使用してください。システム管理者は、最初に Database Character Set Scanner を実行して、CSALTER の実行に適した条件が存在していることを確認する必要があ ります。また、CSALTER の実行前にデータベースのバックアップを実行してください。 CSALTER スクリプトを実行するには、SQL*Plus を起動して、キャラクタ・セットを移行す るデータベースに接続します。Database Character Set Scanner は、CSALTER スクリプトの 前に実行する必要があることに注意してください。その後、次のコマンドを入力します。 sqlplus> @@CSALTER.PLB normal CSALTER スクリプトには、次のフェーズがあります。 ■ CSALTER スクリプトのチェック・フェーズ ■ CSALTER スクリプトの更新フェーズ CSALTER スクリプトのチェック・フェーズ CSALTER スクリプトのチェック・フェーズでは、次のタスクが実行されます。 1. ユーザー・ログインが SYS かどうかがチェックされます。このスクリプトの実行を許可 されるのはユーザー SYS のみです。 2. 過去 7 日以内に全データベース・スキャンが実行されているかどうかがチェックされま す。この期間内に全データベース・スキャンが実行されていない場合は、スクリプトが 停止し、エラーがレポートされます。データベース管理者は、全データベース・スキャ ンの実行時から CSALTER スクリプトの実行時までの間に、他のユーザーによりデータ ベースが更新されないことを確認する必要があります。 3. Oracle により作成されたデータ・ディクショナリ内の CLOB 列が変更不可能か、または 変換可能かがチェックされます。変換可能な CLOB 列が発生するのは、シングルバイ ト・キャラクタ・セットからマルチバイト・キャラクタ・セットに移行する場合です。 データ・ディクショナリの CLOB 列に不可逆セルが見つかると、スクリプトが停止しま す。不可逆 CLOB 列には特殊な処理が必要になる場合があります。詳細は、オラクル社 カスタマ・サポート・センターに問い合せてください。 Character Set Scanner ユーティリティ 12-43 Database Character Set Scanner の CSALTER スクリプト 次のスキーマに属している表は、データ・ディクショナリの一部とみなされます。 SYS SYSTEM CTXSYS DIP DMSYS EXFSYS LBACSYS MDSYS ORDPLUGINS ORDSYS SI_INFORMTN_SCHEMA XDB 4. Oracle により作成されたサンプル・スキーマ内のすべての CLOB 列が変更不可能か、ま たは変換可能かがチェックされます。変換可能な CLOB 列が発生するのは、シングルバ イト・キャラクタ・セットからマルチバイト・キャラクタ・セットに移行する場合で す。次のスキーマに属している表は、サンプル・スキーマの一部です。 HR OE SH PM 5. CLOB データ型が、データ・ディクショナリ内とサンプル・スキーマ内で変換可能な データを含む唯一のデータ型かどうかがチェックされます。他のすべてのユーザーの表 に、CLOB データ型を含めてすべてのデータ型の変換可能なデータがないかどうかが チェックされます。CSALTER スクリプトは、現行のデータベースが新規データベース の正しいサブセットである場合のみ実行されることを意図しているため、すべてのデー タは変更不可能であることが必要ですが、その例外として CLOB データが考えられま す。シングルバイト・キャラクタ・セットからマルチバイト・キャラクタ・セットに移 行する場合、ユーザー作成の CLOB データは変換する必要があり、最初にエクスポート してスキーマから削除する必要があります。CSALTER スクリプトを実行するには、 データベースを再スキャンしてください。変換可能または切捨て対象としてレポートさ れる他のすべてのデータ型のセルは、Database Character Set Scanner を再実行する前に 訂正する必要があります。 関連項目 : ■ ■ A-21 ページ「サブセットとスーパーセット」 CSALTER スクリプトと CLOB データの詳細は、11-9 ページの 「CSALTER スクリプトを使用したキャラクタ・セットの移行」を参照 してください。 12-44 Oracle Database グローバリゼーション・サポート・ガイド Database Character Set Scanner の CSALTER スクリプト CSALTER スクリプトの更新フェーズ CSALTER スクリプトでは、データ・ディクショナリ内の各 CLOB が 12-43 ページの 「CSALTER スクリプトのチェック・フェーズ」で説明したチェックを通ったことが確認され ると、変換が実行されます。データ・ディクショナリ内とサンプル・スキーマ内のすべての CLOB データが更新された後、このスクリプトにより変更がコミットされ、情報が CSM$TABLES ビューに保存されます。データ・ディクショナリ内のすべての CLOB データが 更新された後、CSALTER スクリプトによりデータベースのメタデータが新規キャラクタ・ セットに更新されます。これで移行プロセス全体が完了します。 CSALTER スクリプトは再開可能です。データベースを新規キャラクタ・セットに更新する 処理の途中で失敗した場合、データベース管理者はなんらかの操作を実行する前にデータ ベースを停止して再起動し、CSALTER スクリプトを再実行する必要があります。更新後の 情報はすでに CSM$TABLES ビューに保存されているため、スクリプトではデータ・ディク ショナリ表の CLOB データが 2 回更新されることはありません。移行プロセスは単に再開さ れ、新規キャラクタ・セットへのデータベースの更新が完了します。 CSALTER スクリプトに失敗した場合は、次の方法で更新を再開してください。 1. CSALTER スクリプトを実行した SQL*Plus セッションから、即時に次のコマンドを入力 します。 SHUTDOWN ABORT 2. CSALTER でデータベースをオープンする必要があるため、データベースをマウントせ ずに起動します。 START NOMOUNT 3. CSALTER スクリプトを実行します。 @@CSALTER.PLB NORMAL 4. IMMEDIATE または NORMAL オプションを指定してデータベースを停止します。 5. データベースを起動します。 Character Set Scanner ユーティリティ 12-45 Database Character Set Scanner のビュー Database Character Set Scanner のビュー Database Character Set Scanner では、次のビューが使用されます。 ■ CSMV$COLUMNS ■ CSMV$CONSTRAINTS ■ CSMV$ERRORS ■ CSMV$INDEXES ■ CSMV$TABLES CSMV$COLUMNS このビューには、スキャンされた列の統計情報が含まれます。 列名 データ型 NULL 説明 OWNER_ID NUMBER NOT NULL 表所有者のユーザー ID OWNER_NAME VARCHAR2(30) NOT NULL 表所有者のユーザー名 TABLE_ID NUMBER NOT NULL 表のオブジェクト ID TABLE_NAME VARCHAR2(30) NOT NULL 表のオブジェクト名 COLUMN_ID NUMBER NOT NULL 列 ID COLUMN_INTID NUMBER NOT NULL 内部列 ID(抽象データ型用) COLUMN_NAME VARCHAR2(30) NOT NULL 列名 COLUMN_TYPE VARCHAR2(9) NOT NULL 列データ型 TOTAL_ROWS NUMBER NOT NULL この表の行数 NULL_ROWS NUMBER NOT NULL NULL データ・セルの数 CONV_ROWS NUMBER NOT NULL 変換する必要があるデータ・セルの数 ERROR_ROWS NUMBER NOT NULL 例外があるデータ・セルの数 EXCEED_SIZE_ROWS NUMBER NOT NULL 例外があるデータ・セルの数 DATA_LOSS_ROWS NUMBER - 不可逆変換を行ったデータ・セルの数 MAX_POST_CONVERT_SIZE NUMBER - 変換後の最大データ・サイズ 12-46 Oracle Database グローバリゼーション・サポート・ガイド Database Character Set Scanner のビュー CSMV$CONSTRAINTS このビューには、スキャンされた列の統計情報が含まれます。 列名 データ型 NULL 説明 OWNER_ID NUMBER NOT NULL 制約所有者のユーザー ID OWNER_NAME VARCHAR2(30) NOT NULL 制約所有者のユーザー名 CONSTRAINT_ID NUMBER NOT NULL 制約のオブジェクト ID CONSTRAINT_NAME VARCHAR2(30) NOT NULL 制約のオブジェクト名 CONSTRAINT_TYPE# NUMBER NOT NULL 制約タイプ番号 CONSTRAINT_TYPE VARCHAR2(11) NOT NULL 制約タイプ名 TABLE_ID NUMBER NOT NULL 表のオブジェクト ID TABLE_NAME VARCHAR2(30) NOT NULL 表のオブジェクト名 CONSTRAINT_RID NUMBER NOT NULL ルート制約 ID CONSTRAINT_LEVEL NUMBER NOT NULL 制約レベル CSMV$ERRORS このビューには、セル・データおよびオブジェクト定義の個別例外情報が含まれます。 列名 データ型 NULL 説明 OWNER_ID NUMBER NOT NULL 表所有者のユーザー ID OWNER_NAME VARCHAR2(30) NOT NULL 表所有者のユーザー名 TABLE_ID NUMBER NOT NULL 表のオブジェクト ID TABLE_NAME VARCHAR2(30) - 表のオブジェクト名 COLUMN_ID NUMBER - 列 ID COLUMN_INTID NUMBER - 内部列 ID(抽象データ型用) COLUMN_NAME VARCHAR2(30) - 列名 DATA_ROWID VARCHAR2(1000) - データの行 ID COLUMN_TYPE VARCHAR2(9) - オブジェクト型の列データ型 ERROR_TYPE VARCHAR2(11) - 発生したエラーのタイプ Character Set Scanner ユーティリティ 12-47 Database Character Set Scanner のビュー CSMV$INDEXES このビューには、索引に関する個々の例外情報が含まれます。 列名 データ型 NULL 説明 INDEX_OWNER_ID NUMBER NOT NULL 索引所有者のユーザー ID INDEX_OWNER_NAME VARCHAR2(30) NOT NULL 索引所有者のユーザー名 INDEX_ID NUMBER NOT NULL 索引のオブジェクト ID INDEX_NAME VARCHAR2(30) - 索引のオブジェクト名 INDEX_STATUS# NUMBER - 索引のステータス番号 INDEX_STATUS VARCHAR2(8) - 索引のステータス TABLE_OWNER_ID NUMBER - 表所有者のユーザー ID TABLE_OWNER_NAME VARCHAR2(30) - 表所有者のユーザー名 TABLE_ID NUMBER - 表のオブジェクト ID TABLE_NAME VARCHAR2(30) - 表のオブジェクト名 COLUMN_ID NUMBER - 列 ID COLUMN_INTID NUMBER - 内部列 ID(抽象データ型用) COLUMN_NAME VARCHAR2(30) - 列名 CSMV$TABLES このビューには、スキャンするデータベース表に関する情報が含まれます。スキャンするす べての表がこのビューに列挙されます。 列名 データ型 NULL 説明 OWNER_ID NUMBER NOT NULL 表所有者のユーザー ID OWNER_NAME VARCHAR2(30) NOT NULL 表所有者のユーザー名 TABLE_ID NUMBER - 表のオブジェクト ID TABLE_NAME VARCHAR2(30) - 表のオブジェクト名 MIN_ROWID VARCHAR2(18) - 表の分割範囲の最小行 ID MAX_ROWID VARCHAR2(18) - 表の分割範囲の最大行 ID BLOCKS NUMBER - 分割範囲内のブロック数 12-48 Oracle Database グローバリゼーション・サポート・ガイド Database Character Set Scanner エラー・メッセージ 列名 データ型 NULL 説明 SCAN_COLUMNS NUMBER - スキャンされる列数 SCAN_ROWS NUMBER - スキャンされる行数 SCAN_START VARCHAR2(8) - 表スキャンの開始時間 SCAN_END VARCHAR2(8) - 表スキャンの終了時間 Database Character Set Scanner エラー・メッセージ Database Character Set Scanner には、次のエラー・メッセージがあります。 CSS-00100 failed to allocate memory size of number 原因 : サイズ 0 または最大サイズよりも大きい値でメモリーを割り当てようとしまし た。 処置 : これは内部エラーです。オラクル社カスタマ・サポート・センターに連絡してく ださい。 CSS-00101 failed to release memory 原因 : 無効なポインタでメモリーを解放しようとしました。 処置 : これは内部エラーです。オラクル社カスタマ・サポート・センターに連絡してく ださい。 CSS-00102 failed to release memory, null pointer given 原因 : NULL ポインタでメモリーを解放しようとしました。 処置 : これは内部エラーです。オラクル社カスタマ・サポート・センターに連絡してく ださい。 CSS-00105 failed to parse BOUNDARIES parameter 原因 : BOUNDARIES パラメータが無効な書式で指定されました。 処置 : 正しい構文はマニュアルを参照してください。 CSS-00106 failed to parse SPLIT parameter 原因 : SPLIT パラメータが無効な書式で指定されました。 処置 : 正しい構文はマニュアルを参照してください。 CSS-00107 Character set migration utility schem not installed 原因 : CSM$VERSION 表がデータベースにありません。 処置 : データベースで CSMINST.SQL を実行してください。 Character Set Scanner ユーティリティ 12-49 Database Character Set Scanner エラー・メッセージ CSS-00108 Character set migration utility schema not compatible 原因 : 非互換の CSM$* 表がデータベースにあります。 処置 : データベースで CSMINST.SQL を実行してください。 CSS-00110 failed to parse userid 原因 : USERID パラメータが無効な書式で指定されました。 処置 : 正しい構文はマニュアルを参照してください。 CSS-00111 failed to get RDBMS version 原因 : データベースのバージョン値の取得に失敗しました。 処置 : これは内部エラーです。オラクル社カスタマ・サポート・センターに連絡してく ださい。 CSS-00112 database version not supported 原因 : データベースのバージョンがリリース 8.0.5.0.0 より前です。 処置 : データベースをリリース 8.0.5.0.0 以上にアップグレードし、再試行してください。 CSS-00113 user %s is not allowed to access data dictionary 原因 : 指定したユーザーは、データ・ディクショナリにアクセスできません。 処置 : O7_DICTIONARY_ACCESSIBILITY パラメータを TRUE に設定するか、SYS ユーザーを使用してください。 CSS-00114 failed to get database character set name 原因 : NLS_DATABASE_PARAMETERS ビューからの NLS_CHARACTERSET または NLS_NCHAR_CHARACTERSET パラメータの値の取得に失敗しました。 処置 : これは内部エラーです。オラクル社カスタマ・サポート・センターに連絡してく ださい。 CSS-00115 invalid character set name %s 原因 : 指定したキャラクタ・セットは、有効な Oracle キャラクタ・セットではありま せん。 処置 : 有効な Oracle キャラクタ・セット名を指定して再試行してください。 CSS-00116 failed to reset NLS_LANG/NLS_NCHAR parameter 原因 : NLS_LANG キャラクタ・セットをデータベース・キャラクタ・セットと一致させ ることができませんでした。 処置 : これは内部エラーです。オラクル社カスタマ・サポート・センターに連絡してく ださい。 12-50 Oracle Database グローバリゼーション・サポート・ガイド Database Character Set Scanner エラー・メッセージ CSS-00117 failed to clear previous scan log 原因 : CSM$* 表からの全行削除に失敗しました。 処置 : これは内部エラーです。オラクル社カスタマ・サポート・センターに連絡してく ださい。 CSS-00118 failed to save command parameters 原因 : CSM$PARAMETERS 表への複数行の挿入に失敗しました。 処置 : これは内部エラーです。オラクル社カスタマ・サポート・センターに連絡してく ださい。 CSS-00119 failed to save scan start time 原因 : CSM$PARAMETERS 表への行の挿入に失敗しました。 処置 : これは内部エラーです。オラクル社カスタマ・サポート・センターに連絡してく ださい。 CSS-00120 failed to enumerate tables to scan 原因 : スキャンする表の CSM$TABLES への列挙に失敗しました。 処置 : これは内部エラーです。オラクル社カスタマ・サポート・センターに連絡してく ださい。 CSS-00121 failed to save scan complete time 原因 : CSM$PARAMETERS 表への行の挿入に失敗しました。 処置 : これは内部エラーです。オラクル社カスタマ・サポート・センターに連絡してく ださい。 CSS-00122 failed to create scan report 原因 : データベース・スキャン・レポートの作成に失敗しました。 処置 : これは内部エラーです。オラクル社カスタマ・サポート・センターに連絡してく ださい。 S-00123 failed to check if user %s exist 原因 : 指定したユーザーがデータベースに存在するかどうかをチェックする SELECT 文 でエラーが発生しました。 処置 : これは内部エラーです。オラクル社カスタマ・サポート・センターに連絡してく ださい。 CSS-00124 user %s not found 原因 : 指定したユーザーはデータベースに存在していません。 処置 : ユーザー名をチェックしてください。 Character Set Scanner ユーティリティ 12-51 Database Character Set Scanner エラー・メッセージ CSS-00125 failed to check if table %s.%s exist 原因 : 指定した表がデータベースに存在するかどうかをチェックする SELECT 文でエ ラーが発生しました。 処置 : これは内部エラーです。オラクル社カスタマ・サポート・センターに連絡してく ださい。 CSS-00126 table %s.%s not found 原因 : 指定した表はデータベースに存在していません。 処置 : ユーザー名と表名をチェックしてください。 CSS-00127 user %s does not have DBA privilege 原因 : 指定したユーザーには、データベースのスキャンに必要な DBA 権限がありませ ん。 処置 : DBA 権限が付与されているユーザーを選択してください。 CSS-00128 failed to get server version string 原因 : データベースのバージョン文字列の取得に失敗しました。 処置 : なし。 CSS-00130 failed to initialize semaphore 原因 : 不明です。 処置 : これは内部エラーです。オラクル社カスタマ・サポート・センターに連絡してく ださい。 CSS-00131 failed to spawn scan process %d 原因 : 不明です。 処置 : これは内部エラーです。オラクル社カスタマ・サポート・センターに連絡してく ださい。 CSS-00132 failed to destroy semaphore 原因 : 不明です。 処置 : これは内部エラーです。オラクル社カスタマ・サポート・センターに連絡してく ださい。 CSS-00133 failed to wait semaphore 原因 : 不明です。 処置 : これは内部エラーです。オラクル社カスタマ・サポート・センターに連絡してく ださい。 12-52 Oracle Database グローバリゼーション・サポート・ガイド Database Character Set Scanner エラー・メッセージ CSS-00134 failed to post semaphore 原因 : 不明です。 処置 : これは内部エラーです。オラクル社カスタマ・サポート・センターに連絡してく ださい。 CSS-00140 failed to scan table (tid=%d, oid=%d) 原因 : この特定の表でデータ・スキャンに失敗しました。 処置 : これは内部エラーです。オラクル社カスタマ・サポート・センターに連絡してく ださい。 CSS-00141 failed to save table scan start time 原因 : CSM$TABLES 表の行の更新に失敗しました。 処置 : これは内部エラーです。オラクル社カスタマ・サポート・センターに連絡してく ださい。 CSS-00142 failed to get table information 原因 : 表のユーザー ID およびオブジェクト ID からの様々な情報の取得に失敗しまし た。 処置 : これは内部エラーです。オラクル社カスタマ・サポート・センターに連絡してく ださい。 CSS-00143 failed to get column attributes 原因 : 表の列属性の取得に失敗しました。 処置 : これは内部エラーです。オラクル社カスタマ・サポート・センターに連絡してく ださい。 CSS-00144 failed to scan table %s.%s 原因 : この特定の表でデータ・スキャンに失敗しました。 処置 : これは内部エラーです。オラクル社カスタマ・サポート・センターに連絡してく ださい。 CSS-00145 failed to save scan result for columns 原因 : CSM$COLUMNS 表への複数行の挿入に失敗しました。 処置 : これは内部エラーです。オラクル社カスタマ・サポート・センターに連絡してく ださい。 CSS-00146 failed to save scan result for table 原因 : CSM$TABLES 表の行の更新に失敗しました。 処置 : これは内部エラーです。オラクル社カスタマ・サポート・センターに連絡してく ださい。 Character Set Scanner ユーティリティ 12-53 Database Character Set Scanner エラー・メッセージ CSS-00147 unexpected data truncation 原因 : フェッチ・バッファ用に列バイト・サイズと正確に同じサイズのメモリーが割り 当てられましたが、予期しないデータ切捨てが行われました。 処置 : これは内部エラーです。オラクル社カスタマ・サポート・センターに連絡してく ださい。 CSS-00150 failed to enumerate table 原因 : 指定した表情報の取得に失敗しました。 処置 : これは内部エラーです。オラクル社カスタマ・サポート・センターに連絡してく ださい。 CSS-00151 failed to enumerate user tables 原因 : 指定したユーザーに属する表すべてを列挙できませんでした。 処置 : これは内部エラーです。オラクル社カスタマ・サポート・センターに連絡してく ださい。 CSS-00152 failed to enumerate all tables 原因 : データベース内の表すべてを列挙できませんでした。 処置 : これは内部エラーです。オラクル社カスタマ・サポート・センターに連絡してく ださい。 CSS-00153 failed to enumerate character type columns 原因 : スキャンする表の CHAR、VARCHAR2、LONG および CLOB 列すべてを列挙できま せんでした。 処置 : これは内部エラーです。オラクル社カスタマ・サポート・センターに連絡してく ださい。 CSS-00154 failed to create list of tables to scan 原因 : 表の CSM$TABLES 表への列挙に失敗しました。 処置 : これは内部エラーです。オラクル社カスタマ・サポート・センターに連絡してく ださい。 CSS-00155 failed to split tables for scan 原因 : 指定した表の分割に失敗しました。 処置 : これは内部エラーです。オラクル社カスタマ・サポート・センターに連絡してく ださい。 CSS-00156 failed to get total number of tables to scan 原因 : スキャンする表の数を取得する SELECT 文でエラーが発生しました。 処置 : これは内部エラーです。オラクル社カスタマ・サポート・センターに連絡してく ださい。 12-54 Oracle Database グローバリゼーション・サポート・ガイド Database Character Set Scanner エラー・メッセージ CSS-00157 failed to retrieve list of tables to scan 原因 : 表 ID すべてをスキャナ・メモリーに読み取ることができませんでした。 処置 : これは内部エラーです。オラクル社カスタマ・サポート・センターに連絡してく ださい。 CSS-00158 failed to retrieve index defined on column 原因 : 列に定義された索引を取得する SELECT 文でエラーが発生しました。 処置 : これは内部エラーです。オラクル社カスタマ・サポート・センターに連絡してく ださい。 CSS-00160 failed to open summary report file 原因 : FILE OPEN 関数でエラーが戻されました。 処置 : ディスクに対する作成 / 書込み権限があるかどうかをチェックし、LOG パラメー タに指定したファイル名が有効であるかどうかをチェックしてください。 CSS-00161 failed to report scan elapsed time 原因 : 不明です。 処置 : これは内部エラーです。オラクル社カスタマ・サポート・センターに連絡してく ださい。 CSS-00162 failed to report database size information 原因 : 不明です。 処置 : これは内部エラーです。オラクル社カスタマ・サポート・センターに連絡してく ださい。 CSS-00163 failed to report scan parameters 原因 : 不明です。 処置 : これは内部エラーです。オラクル社カスタマ・サポート・センターに連絡してく ださい。 CSS-00164 failed to report scan summary 原因 : 不明です。 処置 : これは内部エラーです。オラクル社カスタマ・サポート・センターに連絡してく ださい。 CSS-00165 failed to report conversion summary 原因 : 不明です。 処置 : これは内部エラーです。オラクル社カスタマ・サポート・センターに連絡してく ださい。 Character Set Scanner ユーティリティ 12-55 Database Character Set Scanner エラー・メッセージ CSS-00166 failed to report convertible data distribution 原因 : 不明です。 処置 : これは内部エラーです。オラクル社カスタマ・サポート・センターに連絡してく ださい。 CSS-00167 failed to open exception report file 原因 : FILE OPEN 関数でエラーが戻されました。 処置 : ディスクに対する作成 / 書込み権限があるかどうかをチェックし、LOG パラメー タに指定したファイル名が有効であるかどうかをチェックしてください。 CSS-00168 failed to report individual exceptions 原因 : 不明です。 処置 : これは内部エラーです。オラクル社カスタマ・サポート・センターに連絡してく ださい。 CSS-00170 failed to retrieve size of tablespace % 原因 : 不明です。 処置 : これは内部エラーです。オラクル社カスタマ・サポート・センターに連絡してく ださい。 CSS-00171 failed to retrieve free size of tablespace %s 原因 : 不明です。 処置 : これは内部エラーです。オラクル社カスタマ・サポート・センターに連絡してく ださい。 CSS-00172 failed to retrieve total size of tablespace %s 原因 : 不明です。 処置 : これは内部エラーです。オラクル社カスタマ・サポート・センターに連絡してく ださい。 CSS-00173 failed to retrieve used size of the database 原因 : 不明です。 処置 : これは内部エラーです。オラクル社カスタマ・サポート・センターに連絡してく ださい。 CSS-00174 failed to retrieve free size of the database 原因 : 不明です。 処置 : これは内部エラーです。オラクル社カスタマ・サポート・センターに連絡してく ださい。 12-56 Oracle Database グローバリゼーション・サポート・ガイド Database Character Set Scanner エラー・メッセージ CSS-00175 failed to retrieve total size of the database 原因 : 不明です。 処置 : これは内部エラーです。オラクル社カスタマ・サポート・センターに連絡してく ださい。 CSS-00176 failed to enumerate user tables in bitmapped tablespace 原因 : ビットマップ表領域内の表の例挙に失敗しました。 処置 : これは内部エラーです。オラクル社カスタマ・サポート・センターに連絡してく ださい。 Character Set Scanner ユーティリティ 12-57 Database Character Set Scanner エラー・メッセージ 12-58 Oracle Database グローバリゼーション・サポート・ガイド 13 ロケールのカスタマイズ この章では、ロケール・データのカスタマイズ方法について説明します。この章の内容は、 次のとおりです。 ■ Oracle Locale Builder ユーティリティの概要 ■ Oracle Locale Builder を使用した新規言語定義の作成 ■ Oracle Locale Builder を使用した新規地域定義の作成 ■ Oracle Locale Builder を使用したコード・チャートの表示 ■ Oracle Locale Builder を使用した新規キャラクタ・セット定義の作成 ■ Oracle Locale Builder を使用した新規言語ソートの作成 ■ NLB ファイルの生成とインストール ロケールのカスタマイズ 13-1 Oracle Locale Builder ユーティリティの概要 Oracle Locale Builder ユーティリティの概要 Oracle Locale Builder は、ロケール・データをカスタマイズするための簡単で効率的な方法 を提供します。また、ロケール固有のデータを簡単に表示、変更および定義できる GUI を 提供します。Oracle Locale Builder は、テキストやバイナリの定義ファイルからデータを抽 出し、読取り可能な書式で表します。したがって、これらのファイル内で使用されている フォーマットを気にせずに、情報を処理できます。 Oracle Locale Builder では、言語、地域、キャラクタ・セットおよび言語ソートの 4 種類の ロケール定義を管理します。ユーザー定義文字やカスタマイズした言語規則もサポートしま す。既存のテキスト定義ファイルやバイナリ定義ファイルの定義を表示して、変更を加えた り、独自の定義を作成できます。 この項の内容は、次のとおりです。 ■ Oracle Locale Builder 用の Unicode フォントの構成 ■ Oracle Locale Builder のユーザー・インタフェース ■ Oracle Locale Builder のウィンドウとダイアログ・ボックス Oracle Locale Builder 用の Unicode フォントの構成 Oracle Locale Builder では、多くの機能で Unicode 文字が使用されます。たとえば、 Unicode コード・ポイントへのローカル文字コード・ポイントのマッピングが表示されま す。Oracle Locale Builder は、文字が表現されるオペレーティング・システム上で使用可能 なローカル・フォントに依存します。したがって、Oracle Locale Builder を完全にサポート する Unicode フォントの使用をお薦めします。ローカル・フォントで文字を表現できない場 合、その文字は空の四角として表示される可能性があります。 Windows でのフォント構成 Windows には、Unicode をサポートする多数の TrueType フォントおよび OpenType フォ ントがあります。オラクル社では、Microsoft 社の Arial Unicode MS フォントの使用をお薦 めします。このフォントには、約 51,000 の絵文字が含まれ、Unicode 3.2 のほとんどの文字 をサポートしています。 インストールした Unicode フォントは、Oracle Locale Builder で使用できるように、Java Runtime の font.properties ファイルに追加します。この font.properties ファイル は、$JAVAHOME/jre/lib ディレクトリにあります。たとえば、Arial Unicode MS フォン トの場合は、font.properties ファイルに次のエントリを追加します。 dialog.n=Arial Unicode MS, DEFAULT_CHARSET dialoginput.n=Arial Unicode MS, DEFAULT_CHARSET serif.n=Arial Unicode MS, DEFAULT_CHARSET sansserif.n=Arial Unicode MS, DEFAULT_CHARSET 13-2 Oracle Database グローバリゼーション・サポート・ガイド Oracle Locale Builder ユーティリティの概要 n は、フォント・リスト内で Arial Unicode MS フォントに割り当てるための次の順序番号で す。Java Runtime は、各仮想フォントについてフォント・マッピング・リストを検索し、シ ステムで使用可能な最初のフォントを使用します。 font.properties ファイルの編集後に、Oracle Locale Builder を再起動してください。 関連項目 : font.properties ファイルの詳細は、Sun 社の国際化 Web サイトを参照してください。 その他のプラットフォームでのフォント構成 Windows 以外のプラットフォーム用 Unicode フォントは、Windows プラットフォームより も選択肢が限られています。文字を十分にカバーする Unicode フォントが見つからない場合 は、異なる言語に複数のフォントを使用します。前述の Windows プラットフォームの場合 の手順に従って、各フォントをインストールし、そのフォントのエントリを font.properties ファイルに追加してください。 たとえば、フォント ricoh-hg mincho を使用して Sun 社の Solaris で日本語の文字を表示 するには、エントリを $JAVAHOME/lib にある既存の font.properties ファイルの dialog、dialoginput、serif および sansserif セクションに追加します。次に例を示 します。 serif.plain.3=-ricoh-hg mincho l-medium-r-normal--*-%d-*-*-m-*-jisx0201.1976-0 注意 : オペレーティング・システムのロケールによっては、ロケール固 有の font.properties ファイルを使用できます。たとえば、Sun 社の Solaris で現行のオペレーティング・システムのロケールが ja_JP.eucJP の場合は、font.properties.ja を使用できます。 関連項目 : 使用可能なフォントの詳細は、オペレーティング・システム 固有のマニュアルを参照してください。 ロケールのカスタマイズ 13-3 Oracle Locale Builder ユーティリティの概要 Oracle Locale Builder のユーザー・インタフェース Oracle Locale Builder を起動する前に、ORACLE_HOME パラメータが設定されていることを 確認してください。 UNIX オペレーティング・システム上で Oracle Locale Builder を起動するには、 $ORACLE_HOME/nls/lbuilder ディレクトリに変更して次のコマンドを発行します。 % ./lbuilder Windows オペレーティング・システム上では、 「スタート」メニューから Oracle Locale Builder を起動します。「スタート スタート」→「プログラム プログラム」→「Oracle-OraHome10」→ スタート プログラム 「Configuration and Migration Tools」→「Locale Builder」を選択します。また、DOS プ ロンプトから %ORACLE_HOME%¥nls¥lbuilder ディレクトリに移動して lbuilder.bat コマンドを実行する方法もあります。 Oracle Locale Builder を起動すると、図 13-1 の画面が表示されます。 13-4 Oracle Database グローバリゼーション・サポート・ガイド Oracle Locale Builder ユーティリティの概要 図 13-1 Oracle Locale Builder ユーティリティ ロケールのカスタマイズ 13-5 Oracle Locale Builder ユーティリティの概要 Oracle Locale Builder のウィンドウとダイアログ・ボックス Oracle Locale Builder での特定のタスクを説明する前に、次のようなタブ・ページとダイア ログ・ボックスについて説明します。 ■ 「Existing Definitions」ダイアログ・ボックス ■ 「Session Log」ダイアログ・ボックス ■ 「Preview NLT」タブ・ページ ■ 「Open File」ダイアログ・ボックス 注意 : す。 Oracle Locale Builder には、オンライン・ヘルプが付属していま 「Existing Definitions」ダイアログ・ボックス 」ダイアログ・ボックス 「New Language」、 「New Territory」 、「New Character Set」または「New Linguistic Sort」 を選択すると、最初に「General」タブ・ページが表示されます。「Show Existing Definitions」をクリックすると、 「Existing Definitions」ダイアログ・ボックスが表示され ます。 「Existing Definitions」ダイアログ・ボックスでは、ロケール・オブジェクトを名前でオープ ンできます。起動する特定の言語、地域、言語ソート(照合)またはキャラクタ・セットが わかっている場合は、表示されている名前をクリックします。たとえば、図 13-2 では、 AMERICAN 言語定義ファイルをオープンできます。 図 13-2「 「Existing Definitions」ダイアログ・ボックス 」ダイアログ・ボックス 13-6 Oracle Database グローバリゼーション・サポート・ガイド Oracle Locale Builder ユーティリティの概要 「AMERICAN」を選択すると、lx00001.nlb ファイルがオープンします。NLB ファイルは、 特定の言語、地域、キャラクタ・セットまたは言語ソートの設定を含むバイナリ・ファイル です。 言語と地域の略称は参照用のため、オープンできません。 「Session Log」ダイアログ・ボックス 」ダイアログ・ボックス 「Tools」 」→「 「View Log」 」を選択すると、「Session Log」ダイアログ・ボックスが表示されま す。 「Session Log」ダイアログ・ボックスには、現行のセッションで行われた処理が表示さ れます。 「Save Log」をクリックすると、すべての変更のレコードが保存されます。 図 13-3 に、セッション・ログの例を示します。 図 13-3「 「Session Log」ダイアログ・ボックス 」ダイアログ・ボックス ロケールのカスタマイズ 13-7 Oracle Locale Builder ユーティリティの概要 「Preview NLT」タブ・ページ 」タブ・ページ NLT ファイルは、ファイル拡張子が .nlt の XML ファイルです。この拡張子は、特定の言 語、地域、キャラクタ・セットまたは言語ソートの設定を示します。 「Preview NLT」タブ・ ページには、ファイルが読取り可能な書式で表示されるため、変更内容が適切かどうかを確 認できます。 「Preview NLT」タブ・ページからは NLT ファイルを変更できません。NLT ファイルを変更するには、Oracle Locale Builder の特定の要素を使用する必要があります。 図 13-4 に、ユーザー定義言語 AMERICAN FRENCH の「Preview NLT」タブ・ページの例を 示します。 図 13-4 NLT ファイルのプレビュー 13-8 Oracle Database グローバリゼーション・サポート・ガイド Oracle Locale Builder ユーティリティの概要 「Open File」ダイアログ・ボックス 」ダイアログ・ボックス 「File」 」→「 「Open」 」→「 「By File Name」 」を選択すると、 「Open File」ダイアログ・ボックス を表示できます。次に、変更する NLB ファイルまたはテンプレートとして使用する NLB ファイルを選択します。NLB ファイルは、ファイル拡張子が .nlb のバイナリ・ファイル で、その NLT ファイル内の情報に相当するバイナリが含まれています。図 13-5 に、 lx00001.nlb ファイルが選択されている「Open File」ダイアログ・ボックスを示します。 「Preview」ペインは、この NLB ファイルが AMERICAN 言語用であることを示しています。 図 13-5「 「Open File」ダイアログ・ボックス 」ダイアログ・ボックス ロケールのカスタマイズ 13-9 Oracle Locale Builder を使用した新規言語定義の作成 Oracle Locale Builder を使用した新規言語定義の作成 この項では、フランス語に基づいて新規言語を作成する方法について説明します。この新し い言語は、AMERICAN FRENCH と呼ぶことにします。最初に、 「Existing Definitions」ダイ アログ・ボックスから FRENCH をオープンします。次に、 「General」タブ・ページで言語名 を AMERICAN FRENCH に変更し、「Language Abbreviation」を「AF」に変更します。他の 設定はデフォルト値のままにします。図 13-6 に、設定後の「General」タブ・ページを示し ます。 図 13-6 言語の一般情報 13-10 Oracle Database グローバリゼーション・サポート・ガイド Oracle Locale Builder を使用した新規言語定義の作成 言語などのロケール・オブジェクトの名前を選択するときには、次の制限事項が適用されま す。 ■ 名前には ASCII 文字のみを使用する必要があります。 ■ 名前は文字で開始する必要があります。 ■ 言語、地域およびキャラクタ・セット名にはアンダースコアを使用できません。 ユーザー定義言語の場合、 「Language ID」フィールドの有効範囲は 1,000 ~ 10,000 です。 Oracle Locale Builder で提供される値を受け入れるか、この範囲内の値を指定できます。 注意 : 特定の ID 範囲は、ユーザー定義の LANGUAGE、TERRITORY、 CHARACTER SET、MONOLINGUAL COLLATION および MULTILINGUAL COLLATION の定義に対してのみ有効です。この章の各項では、各タイプ のユーザー定義ロケール・オブジェクトに関係する範囲が指定されていま す。 図 13-7 に、 「Month Names」タブ・ページを使用して月の名前を設定する方法を示します。 ロケールのカスタマイズ 13-11 Oracle Locale Builder を使用した新規言語定義の作成 図 13-7「 「Month Names」タブ・ページ 」タブ・ページ すべての名前は、NLT ファイルに記述されているとおりに表示されます。「Capitalize initial letter of month names?」に「Yes」を選択すると、アプリケーションでは月の名前の 1 文字 目に大文字が使用されますが、 「Month Names」タブ・ページには大文字で表示されませ ん。 図 13-8 に、 「Day Names」タブ・ページを示します。 13-12 Oracle Database グローバリゼーション・サポート・ガイド Oracle Locale Builder を使用した新規言語定義の作成 図 13-8「 「Day Names」タブ・ページ 」タブ・ページ ユーザー定義言語用の曜日名を選択できます。すべての名前は、NLT ファイルに記述されて いるとおりに表示されます。 「Capitalize initial letter of day names?」に「Yes」を選択する と、アプリケーションでは曜日名の 1 文字目に大文字が使用されますが、 「Day Names」タ ブ・ページには大文字で表示されません。 ロケールのカスタマイズ 13-13 Oracle Locale Builder を使用した新規地域定義の作成 Oracle Locale Builder を使用した新規地域定義の作成 この項では、新規の地域 REDWOOD SHORES を作成し、地域の略称として RS を使用する方 法について説明します。新規の地域は、既存の地域定義に基づいていません。 基本タスクは次のとおりです。 ■ 地域名の割当て ■ カレンダ、数値、日付、時刻および通貨の各書式の選択 図 13-9 に、 「Territory Name」として REDWOOD SHORES、「Territory ID」として 1001、 「Territory Abbreviation」として RS が設定されている「General」タブ・ページを示しま す。 図 13-9 地域の「General」タブ・ページ 」タブ・ページ 地域の「 ユーザー定義地域に対する「Territory ID」フィールドの有効範囲は、1000 ~ 10000 です。 13-14 Oracle Database グローバリゼーション・サポート・ガイド Oracle Locale Builder を使用した新規地域定義の作成 図 13-10 に、「Calendar」タブ・ページのカレンダ書式の設定を示します。 図 13-10 カレンダ書式の選択 火曜日が週の開始日として設定され、暦年の第 1 週が ISO 週として設定されています。画面 には、サンプル・カレンダが表示されます。 関連項目 : ■ ■ 週の開始日と暦年の第 1 週を選択する方法の詳細は、3-27 ページの 「カレンダ書式」を参照してください。 カレンダ自体をカスタマイズする方法は、13-20 ページの「NLS カレ ンダ・ユーティリティを使用したカレンダのカスタマイズ」を参照し てください。 ロケールのカスタマイズ 13-15 Oracle Locale Builder を使用した新規地域定義の作成 図 13-11 に、 「Date&Time」タブ・ページを示します。 図 13-11 日付書式と時刻書式の選択 リストから書式を選択すると、書式の例が表示されます。この場合は、 「Short Date Format」が DD-MM-YY、「Short Time Format」が HH24:MI:SS、「Oracle Date Format」が DD-MM-YY、「Long Date Format」が fmDay, Month dd, yyyy に設定されています。 「TimeStamp Timezone Format」は設定されていません。 ドロップダウン・メニューから選択せずに、独自のフォーマットを入力することもできます。 関連項目 : ■ 3-20 ページ「日付書式」 ■ 3-24 ページ「時刻書式」 ■ 13-19 ページ「タイム・ゾーン・データのカスタマイズ」 13-16 Oracle Database グローバリゼーション・サポート・ガイド Oracle Locale Builder を使用した新規地域定義の作成 図 13-12 に、「Number」タブ・ページを示します。 図 13-12 数値書式の選択 「Decimal Symbol」にピリオドが選択されています。「Negative Sign Location」は数値の左 に設定されています。 「Numeric Group Separator」はカンマです。 「Number Grouping」 は 3 桁、 「List Separator」はカンマ、 「Measurement System」は Metric、「Rounding Indicator」は 4 に設定されています。 リストの値を使用せずに、独自の値を入力することもできます。 リストから書式を選択すると、書式の例が表示されます。 関連項目 : 3-31 ページ「数値書式」 ロケールのカスタマイズ 13-17 Oracle Locale Builder を使用した新規地域定義の作成 図 13-13 に、「Monetary」タブ・ページの通貨書式の設定を示します。 図 13-13 通貨書式の選択 「Local Currency Symbol」は $、「Alternative Currency Symbol」はユーロ記号に設定され ています。 「Currency Presentation」は、各国通貨記号、借方記号および番号に可能な複数 の順序の 1 つを示しています。 「Decimal Symbol」はピリオド、「Group Separator」はカン マ、 「Monetary Number Grouping」は 3 です。「Monetary Precision」 、つまり小数点以下 の桁数は 3 です。「Credit Symbol」は +、 「Debit Symbol」は - です。「International Currency Separator」は空白であるため、フィールドには表示されていません。 「International Currency Symbol」 (ISO 通貨記号)は USD です。選択した通貨書式の例が 表示されます。 リストを使用せずに、独自の値を入力することもできます。 関連項目 : 3-34 ページ「通貨書式」 13-18 Oracle Database グローバリゼーション・サポート・ガイド Oracle Locale Builder を使用した新規地域定義の作成 これ以降の内容は、次のとおりです。 ■ タイム・ゾーン・データのカスタマイズ ■ NLS カレンダ・ユーティリティを使用したカレンダのカスタマイズ タイム・ゾーン・データのカスタマイズ タイム・ゾーン・ファイルには、有効なタイム・ゾーン名が含まれています。各タイム・ ゾーンには、次の情報が含まれています。 ■ 協定世界時(UTC)からのオフセット。 ■ 夏時間への移行時間。 ■ 標準時間と夏時間の略称。略称は、タイム・ゾーン名とともに使用されます。 Oracle ホーム・ディレクトリには、2 つのタイム・ゾーン・ファイルがあります。デフォル ト・ファイルは oracore/zoneinfo/timezlrg.dat です。一般に使用される小さい方の タイム・ゾーンは、oracore/zoneinfo/timezone.dat に含まれています。 関連項目 : タイム・ゾーン・ファイルの内容と小さい方のタイム・ゾー ン・ファイルのインストール方法の詳細は、4-19 ページの「タイム・ゾー ン・ファイルの選択」を参照してください。 ロケールのカスタマイズ 13-19 Oracle Locale Builder を使用した新規地域定義の作成 NLS カレンダ・ユーティリティを使用したカレンダのカスタマイズ Oracle は、複数のカレンダをサポートしています。これらのカレンダはすべて Oracle のグ ローバリゼーション・サポートから導出されるデータで定義されていますが、一部は、将 来、元号やうるう年の追加が必要になる場合があります。Oracle データベース・サーバーの 新リリースまで待たずにこの情報を追加するには、カレンダ機能の実行時に自動的にロード される外部ファイルを使用できます。 カレンダのデータは、最初にテキスト・ファイルに定義します。このテキスト定義ファイル は、バイナリ形式に変換する必要があります。NLS カレンダ・ユーティリティ(lxegen) を使用すると、テキスト定義ファイルをバイナリ形式に変換できます。 テキスト定義ファイルの名前と位置は、プラットフォーム依存の値でハードコード化されて います。UNIX プラットフォームの場合、ファイル名は lxecal.nlt で、 $ORACLE_HOME/nls/demo ディレクトリにあります。テキスト定義ファイルのサンプルは、 このディレクトリに含まれています。 lxegen ユーティリティでは、テキスト定義ファイルからバイナリ・ファイルが生成されま す。バイナリ・ファイル名もプラットフォーム依存の値でハードコード化されています。 UNIX プラットフォームの場合、バイナリ・ファイル名は lxecal.nlb です。このバイナ リ・ファイルは、テキスト・ファイルと同じディレクトリに生成され、既存のバイナリ・ ファイルが上書きされます。 バイナリ・ファイルが生成されると、そのファイルはシステムの初期化時に自動的にロード されます。このファイルを移動したり名前を変更しないでください。 カレンダ・ユーティリティを起動するには、コマンドラインから次のように入力します。 % lxegen 関連項目 : ■ ■ システム上のファイルの位置については、オペレーティング・システ ムのマニュアルを参照してください。 A-30 ページ「暦法」 13-20 Oracle Database グローバリゼーション・サポート・ガイド Oracle Locale Builder を使用したコード・チャートの表示 Oracle Locale Builder を使用したコード・チャートの表示 Oracle Locale Builder では、キャラクタ・セットのコード・チャートを表示して印刷できま す。Oracle Locale Builder の初期画面から「 「File」 」→「 「New」 」→「 「Character Set」 」を選択し ます。図 13-14 に、表示される画面を示します。 図 13-14 キャラクタ・セットの「General」タブ・ページ 」タブ・ページ キャラクタ・セットの「 「Show Existing Definitions」をクリックします。表示するキャラクタ・セットを選択しま す。図 13-15 に、US7ASCII が選択されている「Existing Definitions」ダイアログ・ボックス を示します。 ロケールのカスタマイズ 13-21 Oracle Locale Builder を使用したコード・チャートの表示 図 13-15 「Existing Definitions」ダイアログ・ボックスでの 」ダイアログ・ボックスでの US7ASCII の選択 「Open」をクリックしてキャラクタ・セットを選択します。図 13-16 に、US7ASCII が選択 されている「General」タブ・ページを示します。 図 13-16 US7ASCII が選択されている「General」タブ・ページ 」タブ・ページ が選択されている「 13-22 Oracle Database グローバリゼーション・サポート・ガイド Oracle Locale Builder を使用したコード・チャートの表示 「Character Data Mapping」タブをクリックします。図 13-17 に、US7ASCII の「Character Data Mapping」タブ・ページを示します。 図 13-17 US7ASCII の「Character Data Mapping」タブ・ページ 」タブ・ページ の「 「View CodeChart」をクリックします。図 13-18 に、US7ASCII のコード・チャートを示し ます。 ロケールのカスタマイズ 13-23 Oracle Locale Builder を使用したコード・チャートの表示 図 13-18 US7ASCII コード・チャート このコード・チャートは、ローカル・キャラクタ・セットでの各文字のエンコーディング 値、各文字に関連付けられた絵文字、および Unicode 値を示しています。 コード・チャートを印刷する場合は、 「Print Page」をクリックします。 13-24 Oracle Database グローバリゼーション・サポート・ガイド Oracle Locale Builder を使用した新規キャラクタ・セット定義の作成 Oracle Locale Builder を使用した新規キャラクタ・セット定義の 作成 特定のユーザーのニーズにあわせてキャラクタ・セットをカスタマイズできます。エンコー ドされた既存のキャラクタ・セット定義を拡張できます。ユーザー定義文字は、多くの場 合、次のような文字を表現する特殊文字をエンコードするために使用されます。 ■ 固有名 ■ 既存のキャラクタ・セット規格で定義されていない旧漢字 ■ ベンダー固有の文字 ■ ユーザーが新たに定義した記号または文字 この項では、Oracle によるユーザー定義文字のサポート方法を説明します。この章の内容 は、次のとおりです。 ■ ユーザー定義文字(UDC)とキャラクタ・セット ■ Oracle のキャラクタ・セット変換アーキテクチャ ■ Unicode 3.2 の Private Use Area ■ キャラクタ・セット間でのユーザー定義文字のクロス・リファレンス ■ 既存のキャラクタ・セットから新規キャラクタ・セットを作成する際のガイドライン ■ 例 : Oracle Locale Builder を使用した新規キャラクタ・セット定義の作成 ユーザー定義文字(UDC)とキャラクタ・セット )とキャラクタ・セット ユーザー定義文字( 一般的に、ユーザー定義文字は東アジア諸国のキャラクタ・セットでサポートされていま す。東アジア諸国のキャラクタ・セットには、ユーザー定義文字を使用するために、コー ド・ポイントの予約域が少なくとも 1 つ用意されています。たとえば、日本語シフト JIS で は、1880 のコード・ポイントがユーザー定義文字用に確保されています。表 13-1 を参照し てください。 表 13-1 シフト JIS のユーザー定義文字の範囲 日本語シフト JIS のユーザー定義文字の範囲 コード・ポイント数 F040-F07E、F080-F0FC 188 F140-F17E、F180-F1FC 188 F240-F27E、F280-F2FC 188 F340-F37E、F380-F3FC 188 F440-F47E、F480-F4FC 188 ロケールのカスタマイズ 13-25 Oracle Locale Builder を使用した新規キャラクタ・セット定義の作成 表 13-1 シフト JIS のユーザー定義文字の範囲(続き) 日本語シフト JIS のユーザー定義文字の範囲 コード・ポイント数 F540-F57E、F580-F5FC 188 F640-F67E、F680-F6FC 188 F740-F77E、F780-F7FC 188 F840-F87E、F880-F8FC 188 F940-F97E、F980-F9FC 188 表 13-2 に示す Oracle キャラクタ・セットには、ユーザー定義文字をサポートする事前定義 済みの範囲が含まれています。 表 13-2 ユーザー定義文字の範囲を含む Oracle キャラクタ・セット キャラクタ・セット名 ユーザー定義文字に使用可能なコード・ポイント数 JA16DBCS 4370 JA16EBCDIC930 4370 JA16SJIS 1880 JA16SJISYEN 1880 KO16DBCS 1880 KO16MSWIN949 1880 ZHS16DBCS 1880 ZHS16GBK 2149 ZHT16DBCS 6204 ZHT16MSWIN950 6217 13-26 Oracle Database グローバリゼーション・サポート・ガイド Oracle Locale Builder を使用した新規キャラクタ・セット定義の作成 Oracle のキャラクタ・セット変換アーキテクチャ 特定の文字を表すコード・ポイントの値は、キャラクタ・セットによって異なります。 図 13-19 に、日本語の漢字を示します。 図 13-19 日本語の漢字 次の表に、この文字が様々なキャラクタ・セットでどのようにエンコードされるかを示しま す。 Unicode エンコーディング JA16SJIS エンコーディング JA16EUC エンコーディング JA16DBCS エンコーディング 4E9C 889F B0A1 4867 Oracle では、すべてのキャラクタ・セットが Unicode 3.2 のコード・ポイントの見地から定 義されています。つまり、それぞれの文字は Unicode 3.2 のコード値として定義されていま す。文字変換は、中間フォームとして Unicode を使用して行われ、ユーザーが意識すること はありません。たとえば、JA16SJIS のクライアントが JA16EUC のデータベースに接続する 場合、JA16SJIS のクライアントから入力した図 13-19 の文字のコード・ポイント値は 889F となります。この文字は内部的に Unicode(コード・ポイント値は 4E9C)に変換された後、 JA16EUC(コード・ポイント値は B0A1)に変換されます。 Unicode 3.2 の Private Use Area Unicode 3.2 では、Private Use Area(PUA)用に E000 ~ F8FF の範囲が予約されています。 PUA は、エンド・ユーザーまたはベンダーがプライベートで使用する文字を定義するため のものです。 ユーザー定義文字は、標準文字と同様に中間フォームとして Unicode 3.2 の PUA を使用し て、2 つの Oracle キャラクタ・セット間で変換されます。 ロケールのカスタマイズ 13-27 Oracle Locale Builder を使用した新規キャラクタ・セット定義の作成 キャラクタ・セット間でのユーザー定義文字のクロス・リファレンス ユーザー定義文字を複数のオペレーティング・システムにまたがって登録する場合は、異な るキャラクタ・セット間のクロス・リファレンスが必要になります。クロス・リファレンス により、ユーザー定義文字を異なるキャラクタ・セット間で確実に正しく変換できます。 たとえば、ユーザー定義文字を日本語シフト JIS のオペレーティング・システムと日本語 IBM ホスト・オペレーティング・システムの両方に登録する場合、この文字に対して、シフ ト JIS のオペレーティング・システムでは F040 コード・ポイント、IBM ホスト・オペレー ティング・システムでは 6941 コード・ポイントの割当てができます。これによって、キャ ラクタ・セット JA16SJIS と JA16DBCS の間で、この文字が正しくマップされます。 Oracle Locale Builder を使用してキャラクタ・セット定義を表示すると、ユーザー定義文字 のクロス・リファレンス情報を検索できます。たとえば、シフト JIS の UDC 値 F040 と IBM ホストの UDC 値 6941 が、同じ Unicode PUA 値 E000 にマップされていることがわかりま す。 関連項目 : 付録 B「Unicode 文字コードの割当て」 既存のキャラクタ・セットから新規キャラクタ・セットを作成する際の ガイドライン デフォルトの場合、Oracle Locale Builder は次に使用可能なキャラクタ・セット ID を生成 します。独自のキャラクタ・セット ID を選択することもできます。キャラクタ・セット定 義用 NLT ファイルのネーミングには、次の書式を使用します。 lx2dddd.nlt dddd は、16 進数で 4 桁のキャラクタ・セット ID です。 キャラクタ・セットを変更する場合は、次のガイドラインに従ってください。 ■ 既存の文字を再マップしないでください。 ■ すべての文字のマッピングは一意であることが必要です。 ■ ■ 新規文字は、Unicode のプライベート使用範囲(e000 ~ f4ff)にマップする必要があり ます。 (実際の Unicode 3.2 のプライベート使用範囲は e000 ~ f8ff です。ただし、 f500 ~ f8ff は Oracle 固有のプライベート使用のために予約されています。 ) キャラクタ・セット定義ファイルでは、1 行の最大文字数は 80 文字です。 注意 : 既存のキャラクタ・セットから新規のマルチバイト・キャラクタ・ セットを作成する場合は、元のキャラクタ・セットとして 8 ビットまたは マルチバイト・キャラクタ・セットを使用してください。 13-28 Oracle Database グローバリゼーション・サポート・ガイド Oracle Locale Builder を使用した新規キャラクタ・セット定義の作成 新規キャラクタ・セットを既存の Oracle キャラクタ・セットから導出する場合は、次の キャラクタ・セットのネーミング規則を使用することをお薦めします。 <Oracle_character_set_name><organization_name>EXT<version> たとえば、Sun 社などの会社が JA16EUC キャラクタ・セットにユーザー定義文字を追加す る場合、適切なキャラクタ・セット名は次のようになります。 JA16EUCSUNWEXT1 このキャラクタ・セット名は、次の各部分で構成されています。 ■ JA16EUC は、Oracle が定義したキャラクタ・セット名です。 ■ SUNW は、会社名(Sun 社の株式取引上の略称)を表します。 ■ EXT は、JA16EUC キャラクタ・セットに対する拡張要素であることを示します。 ■ 1 はバージョンを示します。 例 : Oracle Locale Builder を使用した新規キャラクタ・セット定義の作成 この項では、キャラクタ・セット キャラクタ・セット ID に 10001 を指定して、新規のキャラクタ・セット MYCHARSET を作成する方法について説明します。この例では、WE8ISO8859P1 キャラク タ・セットを使用して中国語の 10 文字を追加します。 図 13-20 に、MYCHARSET の「General」タブ・ページを示します。 ロケールのカスタマイズ 13-29 Oracle Locale Builder を使用した新規キャラクタ・セット定義の作成 図 13-20 MYCHARSET の「General」タブ・ページ 」タブ・ページ の「 「Show Existing Definitions」をクリックし、「Existing Definitions」ダイアログ・ボックス から WE8ISO8859P1 キャラクタ・セットを選択します。 「ISO Character Set ID」フィールドと「Base Character Set ID」フィールドはオプションで す。 「Base Character Set ID」は値の継承に使用され、基本キャラクタ・セットのプロパ ティがテンプレートとして使用されます。 「Character Set ID」は自動的に生成されますが、 オーバーライドして変更することもできます。ユーザー定義キャラクタ・セット ID の有効 範囲は、8000 ~ 8999 または 10000 ~ 20000 です。 注意 : Pro*COBOL を使用している場合は、8000 ~ 8999 のキャラクタ・ セット ID を選択してください。 ユーザー定義キャラクタ・セットの場合、 「ISO Character Set ID」フィールドは空白のまま です。 13-30 Oracle Database グローバリゼーション・サポート・ガイド Oracle Locale Builder を使用した新規キャラクタ・セット定義の作成 図 13-21 に、「Type Specification」タブ・ページを示します。 図 13-21 「Type Specification」タブ・ページ 」タブ・ページ 「Character Set Category」は ASCII_BASED で、「BYTE_UNIQUE」ボタンが選択されてい ます。 ロケールのカスタマイズ 13-31 Oracle Locale Builder を使用した新規キャラクタ・セット定義の作成 既存のキャラクタ・セットを選択した場合、 「Type Specification」タブ・ページのフィール ドはすでに適切な値に設定されています。変更する特別な理由がないかぎり、これらの値を 保持してください。設定を変更する必要がある場合は、次のガイドラインを使用します。 ■ ■ ■ ■ 「FIXED_WIDTH」は、同じ長さの文字のキャラクタ・セットを示すために使用します。 「BYTE_UNIQUE」は、コード・ポイントのシングルバイト範囲がマルチバイト範囲と 区別されていることを意味します。先頭バイトのコードは、その文字がシングルバイト かマルチバイトかを示します(JA16EUC など) 。 「DISPLAY」は、格納用ではなくクライアントでの表示用にのみ使用されるキャラク タ・セットを示します。一部のアラビア語、デーバナーガリ語およびヘブライ語のキャ ラクタ・セットは、表示用キャラクタ・セットです。 「SHIFT」は、シングルバイト文字とマルチバイト文字とを区別するために、追加のシ フト文字が必要なキャラクタ・セットに対して使用します。 関連項目 : シフトイン・キャラクタ・セットとシフトアウト・キャラク タ・セットの詳細は、2-10 ページの「可変幅マルチバイト・コード体系」 を参照してください。 図 13-22 に、ユーザー定義文字の追加方法を示します。 13-32 Oracle Database グローバリゼーション・サポート・ガイド Oracle Locale Builder を使用した新規キャラクタ・セット定義の作成 図 13-22 ユーザー定義文字データのインポート 「Character Data Mapping」タブ・ページをオープンします。キャラクタ・セット内で追加 する文字の前になる文字を選択します。この例では、0xff ローカル文字の値が選択されて います。 1 回に 1 文字を追加することも、テキスト・ファイルを使用して大量の文字をインポートす ることも可能です。この例では、テキスト・ファイルをインポートしています。最初の列 は、ローカル文字の値です。2 列目は Unicode 値です。このファイルには、次の文字の値が 含まれています。 88a2 88a3 88a4 88a5 88a6 88a7 88a8 963f 54c0 611b 6328 59f6 9022 8475 ロケールのカスタマイズ 13-33 Oracle Locale Builder を使用した新規キャラクタ・セット定義の作成 88a9 831c 88aa 7a50 88ab 60aa 「File」 」→「 「Import」 」→「 「User-Defined Characters Data」 」を選択します。 図 13-23 に、インポートした文字をキャラクタ・セットの 0xff の後に追加した状態を示し ます。 図 13-23 キャラクタ・セットでの新しい文字 13-34 Oracle Database グローバリゼーション・サポート・ガイド Oracle Locale Builder を使用した新規言語ソートの作成 Oracle Locale Builder を使用した新規言語ソートの作成 この項では、 「Collation ID」を 10001 に設定して MY_GENERIC_M と呼ばれる新規の多言語 ソートを作成する方法を示します。新規言語ソートの基礎として GENERIC_M 言語ソートを 使用しています。図 13-24 に、この操作の開始方法を示します。 図 13-24 照合の「General」タブ・ページ 」タブ・ページ 照合の「 フラグの設定は、自動的に導出されます。 「SWAP_WITH_NEXT」は、タイ語とラオ語の ソートに関係します。 「REVERSE_SECONDARY」は、フランス語のソート用です。 「CANONICAL_EQUIVALENCE」は、標準的な規則を使用するかどうかを決定します。 この例では、 「CANONICAL_EQUIVALENCE」がオンになっています。 ユーザー定義ソートのための「Collation ID」(ソート ID)の有効範囲は、単一言語照合の 場合は 1000 ~ 2000、多言語照合の場合は 10000 ~ 11000 です。 ロケールのカスタマイズ 13-35 Oracle Locale Builder を使用した新規言語ソートの作成 関連項目 : ■ ■ 標準的な規則の詳細は、図 13-28「「Canonical Rules」ダイアログ・ ボックス」を参照してください。 第 5 章「言語ソートと文字列検索」 図 13-25 に、「Unicode Collation Sequence」タブ・ページを示します。 図 13-25 「Unicode Collation Sequence」タブ・ページ 」タブ・ページ 13-36 Oracle Database グローバリゼーション・サポート・ガイド Oracle Locale Builder を使用した新規言語ソートの作成 この例では、文字の後にソートされるように数字を移動して、言語ソートをカスタマイズし ます。手順は次のとおりです。 1. 移動する Unicode 値を選択します。図 13-25 では、¥x0034 Unicode 値が選択されてい ます。 「Unicode Collation Sequence」タブ・ページでの値の位置は、ノード ノードと呼ばれ ノード ます。 2. 「Cut」をクリックします。ノードを移動する位置を選択します。 3. 「Paste」をクリックします。 「Paste」をクリックすると、図 13-26 に示す「Paste Node」 ダイアログ・ボックスがオープンします。 図 13-26 「Paste Node」ダイアログ・ボックス 」ダイアログ・ボックス ■ 「Paste Node」ダイアログ・ボックスでは、選択した位置の後にノードを貼り付けるか 前に貼り付けるかを選択できます。また、貼付け位置の隣にあるノードを基準として、 貼り付けるノードのレベル( 「Primary」 、「Secondary」または「Tertiary」 )も選択でき ます。 ノードを貼り付ける位置とレベルを選択します。 図 13-26 では、「After」ボタンと「Primary」ボタンが選択されています。 ■ 「OK」をクリックしてノードを貼り付けます。 同様の手順に従って、他の数字を文字 a ~ z の後の位置に移動します。 図 13-27 に、数字 0 ~ 4 を文字 a ~ z の後の位置に移動した後の「Unicode Collation Sequence」タブ・ページを示します。 ロケールのカスタマイズ 13-37 Oracle Locale Builder を使用した新規言語ソートの作成 図 13-27 変更後の「Unicode Collation Sequence」画面 」画面 変更後の「 これ以降の内容は、次のとおりです。 ■ 同じ発音区別記号を持つすべての文字のソート順序の変更 ■ 発音区別記号を持つ 1 文字のソート順序の変更 13-38 Oracle Database グローバリゼーション・サポート・ガイド Oracle Locale Builder を使用した新規言語ソートの作成 同じ発音区別記号を持つすべての文字のソート順序の変更 次の例に、発音区別記号付きの文字のソート順序を変更する方法を示します。そのために は、特定の発音区別記号を含むすべての文字のソート順序を変更する方法と、一度に 1 文字 ずつ変更する方法があります。この例では、曲折アクセント記号付きの各文字(û など)の ソート順序を、チルドが付いた同じ文字の後になるように変更します。 「Tools」 」→「 「Canonical Rules」 」を選択して、現在のソート順序を確認します。図 13-28 の 「Canonical Rules」ダイアログ・ボックスがオープンします。 図 13-28 「Canonical Rules」ダイアログ・ボックス 」ダイアログ・ボックス 図 13-28 に、アクセント記号付き文字が、対応する標準的な文字に分解される方法と現在の ソート順序を示します。たとえば、û は u と ^ の組合せとして表されます。 関連項目 : 標準的な規則の詳細は、第 5 章「言語ソートと文字列検索」 を参照してください。 Oracle Locale Builder の照合の「General」タブ・ページ(図 13-24)で、「Non-Spacing Characters」タブをクリックします。 「Non-Spacing Characters」タブ・ページを使用する と、発音区別記号に対する変更がすべての文字に適用されます。図 13-29 に、 「Non-Spacing Characters」タブ・ページを示します。 ロケールのカスタマイズ 13-39 Oracle Locale Builder を使用した新規言語ソートの作成 図 13-29 同じ発音区別記号を持つすべての文字のソート順序の変更 曲折アクセント記号を選択して「Cut」をクリックします。 「Removal Confirmation」ダイア ログ・ボックスで「Yes」をクリックします。チルドを選択して「Paste」をクリックしま す。 「Paste Node」ダイアログ・ボックスで「After」と「Secondary」を選択して「OK」を クリックします。 図 13-30 に、新しいソート順序を示します。 13-40 Oracle Database グローバリゼーション・サポート・ガイド Oracle Locale Builder を使用した新規言語ソートの作成 図 13-30 同じ発音区別記号を持つ文字の新規のソート順序 ロケールのカスタマイズ 13-41 Oracle Locale Builder を使用した新規言語ソートの作成 発音区別記号を持つ 1 文字のソート順序の変更 発音区別記号を持つ特定の文字の順序を変更するには、その文字を適切な位置に直接挿入し ます。発音区別記号付きの文字は「Unicode Collation Sequence」タブ・ページに表示され ないため、新しい位置へのカット・アンド・ペーストはできません。 この例では、ä のソート順序を Z の後にソートされるように変更します。 「Unicode Collation」タブをクリックします。ä の隣に配置する文字 Z を選択します。 「Add」をクリックします。図 13-31 の「Insert New Node」ダイアログ・ボックスが表示さ れます。 図 13-31 発音区別記号を持つ 1 文字のソート順序の変更 「Insert New Node」ダイアログ・ボックスで「After」と「Primary」を選択します。ä の Unicode コード・ポイント値を入力します。このコード・ポイント値は、¥x00e4 です。 「OK」をクリックします。 13-42 Oracle Database グローバリゼーション・サポート・ガイド Oracle Locale Builder を使用した新規言語ソートの作成 図 13-32 に、変更後のソート順序を示します。 図 13-32 1 文字を変更後の新規ソート順序 ロケールのカスタマイズ 13-43 NLB ファイルの生成とインストール NLB ファイルの生成とインストール 新規言語、地域、キャラクタ・セットまたは言語ソートを定義した後は、NLT ファイルから 新規の NLB ファイルを生成します。 1. ファイルの所有者(通常はユーザー oracle)として、ORA_NLS10 ディレクトリ内で、 NLS インストール・ブート・ファイル(lx0boot.nlb)と NLS システム・ブート・ ファイル(lx1boot.nlb)のバックアップを作成します。UNIX プラットフォームの 場合は、次のようなコマンドを入力します。 % % % % setenv ORA_NLS10 $ORACLE_HOME/nls/data cd $ORA_NLS10 cp -p lx0boot.nlb lx0boot.nlb.orig cp -p lx1boot.nlb lx1boot.nlb.orig -p オプションを指定すると、元のファイルのタイムスタンプが保たれることに注意し てください。 2. Oracle Locale Builder で、 「Tools」 」→「 「Generate NLB」 」を選択するか、左側のバーで 」アイコンをクリックします。 「Generate NLB」 3. 「Browse」をクリックして、NLT ファイルが格納されているディレクトリを検索しま す。位置を指定するダイアログ・ボックスは、図 13-33 のとおりです。 % % % % setenv ORA_NLS10 $ORACLE_HOME/nls/data cd $ORA_NLS10 cp -p lx0boot.nlb lx0boot.nlb.orig cp -p lx1boot.nlb lx1boot.nlb.orig 図 13-33 「Location」ダイアログ・ボックス 」ダイアログ・ボックス NLT ファイルは指定しないでください。Oracle Locale Builder は、各 NLT ファイルに対し て NLB ファイルを生成します。 ■ 「OK」をクリックして NLB ファイルを生成します。 図 13-34 は、ディレクトリ内の全 NLT ファイルに対して NLB ファイルが正常に生成された ことを示す最終的な通知を示しています。 13-44 Oracle Database グローバリゼーション・サポート・ガイド NLB ファイルの生成とインストール 図 13-34 「NLB Generation Success」ダイアログ・ボックス 」ダイアログ・ボックス ■ lx1boot.nlb ファイルを ORA_NLS10 環境変数で指定したパスにコピーします。たと えば、UNIX プラットフォームの場合は、次のようなコマンドを入力します。 % cp /directory_name/lx1boot.nlb $ORA_NLS10/lx1boot.nlb ■ 新規の NLB ファイルを ORA_NLS10 ディレクトリにコピーします。たとえば、UNIX プ ラットフォームの場合は、次のようなコマンドを入力します。 % cp /directory_name/lx22710.nlb $ORA_NLS10 % cp /directory_name/lx52710.nlb $ORA_NLS10 注意 : Oracle Locale Builder では、NLT ファイルと同じディレクトリに NLB ファイルが生成されます。 ■ ■ 新規に作成したロケール・データを使用できるように、データベースを再起動します。 新規のロケール・データをクライアント側で使用するには、NLB ファイルをインストー ルしてからクライアントを終了し、再起動します。 関連項目 : ORA_NLS10 環境変数の詳細は、1-2 ページの「オンデマンド のロケール・データ」を参照してください。 ロケールのカスタマイズ 13-45 転送可能な NLB データ 転送可能な NLB データ あるプラットフォーム上で生成される NLB データを、FTP などを使用して別のプラット フォームに転送できます。転送された NLB ファイルは、元のプラットフォームで生成され た NLB ファイルと同じ方法で使用できます。これにより、あるプラットフォームでロケー ル・データを変更して他のプラットフォームにコピーできるため便利です。プラットフォー ム間では、変更があったファイルのみでなく、すべての NLB ファイルをコピーする必要が あることに注意してください。また、13-44 ページの「NLB ファイルの生成とインストール」 の操作の実行方法は、以前のリリースと同じであることにも注意してください。Solaris プ ラットフォーム上で生成された NLB ファイルを FTP で Windows プラットフォームにコ ピーし、そこで同じ機能を提供できます。 NLB のロード中には、様々なバイナリ形式(32 ビット、64 ビット、ビッグ・エンディアン、 リトル・エンディアン、ASCII および EBCDIC など)が、ユーザーに対して透過的な方法で 処理されます。 13-46 Oracle Database グローバリゼーション・サポート・ガイド A ロケール・データ この付録では、Oracle サーバーでサポートされている言語、地域、キャラクタ・セットおよ びその他のロケール・データについて説明します。この付録の内容は、次のとおりです。 ■ 言語 ■ 翻訳済みメッセージ ■ 地域 ■ キャラクタ・セット ■ 言語およびキャラクタ・セット検出のサポート ■ 言語ソート ■ 暦法 ■ タイム・ゾーン名 ■ 廃止されたロケール・データ キャラクタ・セット、言語、地域およびソート順序に関する情報は、V$NLS_VALID_ VALUES 動的パフォーマンス・ビューを問い合せて取得できます。 関連項目 : このビューで戻すことができるデータの詳細は、 『Oracle Database リファレンス』を参照してください。 ロケール・データ A-1 言語 言語 表 A-1 に示す言語は、それぞれ次のようなロケール依存情報をサポートしています。 ■ 日と月の名前および略称 ■ A.M.、P.M.、A.D. および B.C. に相当する記号 ■ ORDER BY SQL 句が指定されている場合の文字データのデフォルトのソート順序 ■ 書込み方向(左から右または右から左) ■ 肯定的および否定的な応答文字列(YES および NO など) Unicode データベースおよびデータ型を使用すると、表 A-1 に示されない多数の言語を含め て、ほぼあらゆる現代言語についてデータの格納、処理および取出しができます。 表 A-1 Oracle がサポートしている言語 言語名 言語の略称 デフォルト・ソート AMERICAN us バイナリ ARABIC ar ARABIC ASSAMESE as バイナリ AZERBAIJANI az AZERBAIJANI BANGLA bn バイナリ BRAZILIAN PORTUGUESE ptb WEST_EUROPEAN BULGARIAN bg BULGARIAN CANADIAN FRENCH frc CANADIAN FRENCH CATALAN ca CATALAN CROATIAN hr CROATIAN CYRILLIC KAZAKH ckk GENERIC_M CYRILLIC SERBIAN csr GENERIC_M CYRILLIC UZBEK cuz GENERIC_M CZECH cs CZECH DANISH dk DANISH DUTCH nl DUTCH EGYPTIAN eg ARABIC ENGLISH gb バイナリ A-2 Oracle Database グローバリゼーション・サポート・ガイド 言語 表 A-1 Oracle がサポートしている言語(続き) 言語名 言語の略称 デフォルト・ソート ESTONIAN et ESTONIAN FINNISH sf FINNISH FRENCH f FRENCH GERMAN DIN din GERMAN GERMAN d GERMAN GREEK el GREEK GUJARATI gu バイナリ HEBREW iw HEBREW HINDI hi バイナリ HUNGARIAN hu HUNGARIAN ICELANDIC is ICELANDIC INDONESIAN in INDONESIAN ITALIAN i WEST_EUROPEAN JAPANESE ja バイナリ KANNADA kn バイナリ KOREAN ko バイナリ LATIN AMERICAN SPANISH esa SPANISH LATIN SERBIAN lsr バイナリ LATIN UZBEK luz GENERIC_M LATVIAN lv LATVIAN LITHUANIAN lt LITHUANIAN MACEDONIAN mk バイナリ MALAY ms MALAY MALAYALAM ml バイナリ MARATHI mr バイナリ MEXICAN SPANISH esm WEST_EUROPEAN NORWEGIAN n NORWEGIAN ORIYA or バイナリ ロケール・データ A-3 言語 表 A-1 Oracle がサポートしている言語(続き) 言語名 言語の略称 デフォルト・ソート POLISH pl POLISH PORTUGUESE pt WEST_EUROPEAN PUNJABI pa バイナリ ROMANIAN ro ROMANIAN RUSSIAN ru RUSSIAN SIMPLIFIED CHINESE zhs バイナリ SLOVAK sk SLOVAK SLOVENIAN sl SLOVENIAN SPANISH e SPANISH SWEDISH s SWEDISH TAMIL ta バイナリ TELUGU te バイナリ THAI th THAI_DICTIONARY TRADITIONAL CHINESE zht バイナリ TURKISH tr TURKISH UKRAINIAN uk UKRAINIAN VIETNAMESE vn VIETNAMESE A-4 Oracle Database グローバリゼーション・サポート・ガイド 翻訳済みメッセージ 翻訳済みメッセージ Oracle エラー・メッセージは、表 A-2 に示す言語に翻訳されています。 表 A-2 Oracle がサポートしているメッセージ 名前 略称 ARABIC ar BRAZILIAN PORTUGUESE ptb CATALAN ca CZECH cs DANISH dk DUTCH nl FINNISH sf FRENCH f GERMAN d GREEK el HEBREW iw HUNGARIAN hu ITALIAN i JAPANESE ja KOREAN ko NORWEGIAN n POLISH pl PORTUGUESE pt ROMANIAN ro RUSSIAN ru SIMPLIFIED CHINESE zhs SLOVAK sk SPANISH e SWEDISH s THAI th ロケール・データ A-5 地域 表 A-2 Oracle がサポートしているメッセージ(続き) 名前 略称 TRADITIONAL CHINESE zht TURKISH tr 地域 表 A-3 に、Oracle サーバーでサポートしている地域を示します。 表 A-3 Oracle がサポートしている地域 名前 名前 名前 ALGERIA HONG KONG PERU - - PHILIPPINES AMERICA HUNGARY POLAND AUSTRALIA ICELAND PORTUGAL AUSTRIA INDIA PUERTO RICO BAHRAIN INDONESIA QATAR BANGLADESH IRAQ ROMANIA - - RUSSIA BELGIUM IRELAND SAUDI ARABIA - - SERBIA AND MONTENEGRO BRAZIL ISRAEL SINGAPORE BULGARIA ITALY SLOVAKIA CANADA JAPAN SLOVENIA CATALONIA JORDAN SOMALIA CHILE KAZAKHSTAN SOUTH AFRICA CHINA KOREA SPAIN ARGENTINA - - AZERBAIJAN KUWAIT SUDAN COLOMBIA LATVIA SWEDEN COSTA RICA LEBANON SWITZERLAND A-6 Oracle Database グローバリゼーション・サポート・ガイド 地域 表 A-3 Oracle がサポートしている地域(続き) 名前 名前 名前 CROATIA LIBYA SYRIA CYPRUS LITHUANIA TAIWAN CZECH REPUBLIC LUXEMBOURG THAILAND DENMARK - THE NETHERLANDS DJIBOUTI MALAYSIA TUNISIA ECUADOR - - EGYPT MAURITANIA TURKEY EL SALVADOR MEXICO UKRAINE ESTONIA MOROCCO UNITED ARAB EMIRATES FINLAND NEW ZEALAND UNITED KINGDOM FRANCE NICARAGUA UZBEKISTAN FYR MACEDONIA - VENEZUELA GUATEMALA NORWAY VIETNAM GERMANY OMAN YEMEN GREECE PANAMA - ロケール・データ A-7 キャラクタ・セット キャラクタ・セット ここでは、Oracle がサポートしているキャラクタ・セットを、次の 3 つの言語グループに分 けて示します。 ■ アジア地域言語のキャラクタ・セット ■ ヨーロッパ地域言語のキャラクタ・セット ■ 中東地域言語のキャラクタ・セット また、共通のサブセットとスーパーセットの組合せも示します。 一部のキャラクタ・セットは、複数の言語に対して示されています。これは、そのキャラク タ・セットが多言語をサポートしているためです。たとえば、Unicode は世界の主なスクリ プトの大半をサポートしているため、アジア地域、ヨーロッパ地域および中東地域の言語グ ループに記述されています。 コメントには、使用されるエンコーディングのタイプを次のように示します。 SB = シングルバイト・エンコーディング MB = マルチバイト・エンコーディング FIXED = 固定幅マルチバイト・エンコーディング 第 3 章「グローバリゼーション・サポート環境の設定」の説明のように、エンコーディング のタイプはパフォーマンスに影響を及ぼすため、言語のニーズを満たす最も効果的なエン コーティングを使用してください。また、一部のエンコーディング・タイプは、特定のデー タ型のみで使用できます。たとえば、AL16UTF16 キャラクタ・セットは NCHAR キャラク タ・セットとしてのみ使用でき、データベース・キャラクタ・セットとしては使用できませ ん。 また、コメントには、そのキャラクタ・セットに固有の他の機能も記述されています。これ らの情報は、ユーザーまたはデータベース管理者にとって重要な場合があります。たとえ ば、キャラクタ・セットがユーロ通貨記号をサポートしているかどうか、ユーザー定義文字 がサポートされているかどうか、およびキャラクタ・セットが ASCII の完全なスーパーセッ トであるかどうかなどの情報が記述されています(ALTER DATABASE CHARACTER SET 文を 使用すると、US7ASCII キャラクタ・セットから ASCII の完全なスーパーセットであるキャ ラクタ・セットに移行できます) 。 キャラクタ・セット表のコメント列の凡例は、次のとおりです。 EURO: ユーロ記号をサポート UDC: ユーザー定義文字をサポート ASCII: ASCII の完全なスーパーセット MB: マルチバイト SB: シングルバイト 個々のコード・ページのレイアウトは記述されていません。特定のキャラクタ・セット固有 の情報、文字レパートリおよびコード・ポイントの値については、Oracle Locale Builder を A-8 Oracle Database グローバリゼーション・サポート・ガイド キャラクタ・セット 使用できます。それ以外の場合は、実際の各国の規格、国際規格またはベンダー固有の規格 を参照してください。 関連項目 : 第 13 章「ロケールのカスタマイズ」 アジア地域言語のキャラクタ・セット 表 A-4 に、アジア地域の言語をサポートしている Oracle キャラクタ・セットを示します。 表 A-4 アジア地域言語のキャラクタ・セット 名前 説明 コメント BN8BSCII バングラデシュ国内規格コード 8 ビット BSCII SB、ASCII ZHT16BIG5 BIG5 16 ビット繁体字中国語 MB、ASCII ZHS16CGB231280 CGB2312-80 16 ビット簡体字中国語 MB、ASCII JA16EUC EUC 24 ビット日本語 MB、ASCII JA16EUCTILDE 波形のダッシュとチルドが Unicode との間でマッピングされる方法 MB、ASCII を除き、JA16EUC と同じ JA16EUCYEN EUC 24 ビット日本語(バックスラッシュ(\)は日本語の円記号 (¥)になります。 ) MB ZHT32EUC EUC 32 ビット繁体字中国語 MB、ASCII ZHS16GBK GBK 16 ビット簡体字中国語 MB、ASCII、UDC ZHS32GB18030 GB18030-2000 MB、ASCII、EURO ZHT16CCDC HP CCDC 16 ビット繁体字中国語 MB、ASCII JA16DBCS IBM EBCDIC 16 ビット日本語 MB、UDC JA16EBCDIC930 IBM DBCS コード・ページ 290 16 ビット日本語 MB、UDC KO16DBCS IBM EBCDIC 16 ビット韓国語 MB、UDC ZHS16DBCS IBM EBCDIC 16 ビット簡体字中国語 MB、UDC ZHT16DBCS IBM EBCDIC 16 ビット繁体字中国語 MB、UDC JA16VMS JVMS 16 ビット日本語 MB、ASCII KO16KSC5601 KSC5601 16 ビット韓国語 MB、ASCII KO16KSCCS KSCCS 16 ビット韓国語 MB、ASCII ZHS16MACCGB231280 Mac クライアント CGB2312-80 16 ビット簡体字中国語 MB ロケール・データ A-9 キャラクタ・セット 表 A-4 アジア地域言語のキャラクタ・セット(続き) 名前 説明 コメント JA16MACSJIS Mac クライアント・シフト JIS 16 ビット日本語 MB TH8MACTHAI Mac クライアント 8 ビット・ラテン語 / タイ語 SB TH8MACTHAIS Mac サーバー 8 ビット・ラテン語 / タイ語 SB、ASCII TH8TISEBCDICS タイ工業規格 620-2533-EBCDIC サーバー 8 ビット SB KO16MSWIN949 MS Windows コード・ページ 949 韓国語 MB、ASCII、UDC ZHT16HKSCS MS Windows コード・ページ 950 香港補足キャラクタ・セット HKSCS-2001 付き(Unicode との間のキャラクタ・セット変換は Unicode 3.0 に基づきます。 ) MB、ASCII、EURO ZHT16MSWIN950 MS Windows コード・ページ 950 繁体字中国語 MB、ASCII、UDC VN8MSWIN1258 MS Windows コード・ページ 1258 8 ビット・ベトナム語 SB、ASCII、EURO IN8ISCII 複数スクリプト・インド標準 8 ビット・ラテン語 / 諸インド語 SB、ASCII JA16SJIS シフト JIS 16 ビット日本語 MB、ASCII、UDC JA16SJISTILDE 波形のダッシュとチルドが Unicode との間でマッピングされる方法 MB、ASCII、UDC を除き、JA16SJIS と同じ JA16SJISYEN シフト JIS 16 ビット日本語(バックスラッシュ(\)は日本語の 円記号(¥)になります。 ) MB、UDC ZHT32SOPS SOPS 32 ビット繁体字中国語 MB、ASCII ZHT16DBT 台湾課税 16 ビット繁体字中国語 MB、ASCII TH8TISASCII タイ工業規格 620-2533 - ASCII 8 ビット SB、ASCII、EURO TH8TISEBCDIC タイ工業規格 620-2533 - EBCDIC 8 ビット SB ZHT32TRIS TRIS 32 ビット繁体字中国語 MB、ASCII AL16UTF16 詳細は、A-20 ページの「ユニバーサル・キャラクタ・セット」を 参照してください。 MB、EURO、 FIXED AL32UTF8 詳細は、A-20 ページの「ユニバーサル・キャラクタ・セット」を 参照してください。 MB、ASCII、EURO UTF8 詳細は、A-20 ページの「ユニバーサル・キャラクタ・セット」を 参照してください。 MB、ASCII、EURO UTFE 詳細は、A-20 ページの「ユニバーサル・キャラクタ・セット」を 参照してください。 MB、EURO VN8VN3 VN3 8 ビット・ベトナム語 SB、ASCII A-10 Oracle Database グローバリゼーション・サポート・ガイド キャラクタ・セット ヨーロッパ地域言語のキャラクタ・セット 表 A-5 に、ヨーロッパ地域の言語をサポートしている Oracle キャラクタ・セットを示しま す。 表 A-5 ヨーロッパ地域言語のキャラクタ・セット 名前 説明 コメント US7ASCII ASCII 7 ビット米語 SB、ASCII SF7ASCII ASCII 7 ビット・フィンランド語 SB YUG7ASCII ASCII 7 ビット・ユーゴスラビア語 SB RU8BESTA BESTA 8 ビット・ラテン語 / キリル文字 SB、ASCII EL8GCOS7 Bull EBCDIC GCOS7 8 ビット・ギリシア語 SB WE8GCOS7 Bull EBCDIC GCOS7 8 ビット西ヨーロッパ語 SB EL8DEC DEC 8 ビット・ラテン語 / ギリシア語 SB TR7DEC DEC VT100 7 ビット・トルコ語 SB TR8DEC DEC 8 ビット・トルコ語 SB、ASCII WE8DEC DEC 8 ビット西ヨーロッパ語 SB、ASCII D7DEC DEC VT100 7 ビット・ドイツ語 SB F7DEC DEC VT100 7 ビット・フランス語 SB S7DEC DEC VT100 7 ビット・スウェーデン語 SB E7DEC DEC VT100 7 ビット・スペイン語 SB NDK7DEC DEC VT100 7 ビット・ノルウェー語 / デンマーク語 SB I7DEC DEC VT100 7 ビット・イタリア語 SB NL7DEC DEC VT100 7 ビット・オランダ語 SB CH7DEC DEC VT100 7 ビット・スイス語(ドイツ語 / フランス語) SB SF7DEC DEC VT100 7 ビット・フィンランド語 SB WE8DG DG 8 ビット西ヨーロッパ語 SB、ASCII WE8EBCDIC37C EBCDIC コード・ページ 37 8 ビット Oracle/c SB WE8EBCDIC37 EBCDIC コード・ページ 37 8 ビット西ヨーロッパ語 SB D8EBCDIC273 EBCDIC コード・ページ 273/1 8 ビット・ドイツ語(オーストリア) SB ロケール・データ A-11 キャラクタ・セット 表 A-5 ヨーロッパ地域言語のキャラクタ・セット(続き) 名前 説明 コメント DK8EBCDIC277 EBCDIC コード・ページ 277/1 8 ビット・デンマーク語 SB S8EBCDIC278 EBCDIC コード・ページ 278/1 8 ビット・スウェーデン語 SB I8EBCDIC280 EBCDIC コード・ページ 280/1 8 ビット・イタリア語 SB WE8EBCDIC284 EBCDIC コード・ページ 284 8 ビット・スペイン語(南米) SB WE8EBCDIC285 EBCDIC コード・ページ 285 8 ビット西ヨーロッパ語 SB WE8EBCDIC1047 EBCDIC コード・ページ 1047 8 ビット西ヨーロッパ語 SB WE8EBCDIC1140 EBCDIC コード・ページ 1140 8 ビット西ヨーロッパ語 SB、EURO WE8EBCDIC1140C EBCDIC コード・ページ 1140 クライアント 8 ビット西ヨーロッパ語 SB、EURO WE8EBCDIC1145 EBCDIC コード・ページ 1145 8 ビット西ヨーロッパ語 SB、EURO WE8EBCDIC1146 EBCDIC コード・ページ 1146 8 ビット西ヨーロッパ語 SB、EURO WE8EBCDIC1148 EBCDIC コード・ページ 1148 8 ビット西ヨーロッパ語 SB、EURO WE8EBCDIC1148C EBCDIC コード・ページ 1148 クライアント 8 ビット西ヨーロッパ語 SB、EURO F8EBCDIC297 EBCDIC コード・ページ 297 8 ビット・フランス語 SB WE8EBCDIC500C EBCDIC コード・ページ 500 8 ビット Oracle/c SB WE8EBCDIC500 EBCDIC コード・ページ 500 8 ビット西ヨーロッパ語 SB EE8EBCDIC870 EBCDIC コード・ページ 870 8 ビット東ヨーロッパ語 SB EE8EBCDIC870C EBCDIC コード・ページ 870 クライアント 8 ビット東ヨーロッパ語 SB EE8EBCDIC870S EBCDIC コード・ページ 870 サーバー 8 ビット東ヨーロッパ語 SB WE8EBCDIC871 EBCDIC コード・ページ 871 8 ビット・アイスランド語 SB EL8EBCDIC875 EBCDIC コード・ページ 875 8 ビット・ギリシア語 SB EL8EBCDIC875R EBCDIC コード・ページ 875 サーバー 8 ビット・ギリシア語 SB CL8EBCDIC1025 EBCDIC コード・ページ 1025 8 ビット・キリル文字 SB CL8EBCDIC1025C EBCDIC コード・ページ 1025 クライアント 8 ビット・キリル文字 SB CL8EBCDIC1025R EBCDIC コード・ページ 1025 サーバー 8 ビット・キリル文字 SB CL8EBCDIC1025S EBCDIC コード・ページ 1025 サーバー 8 ビット・キリル文字 SB CL8EBCDIC1025X EBCDIC コード・ページ 1025(修正版)8 ビット・キリル文字 SB A-12 Oracle Database グローバリゼーション・サポート・ガイド キャラクタ・セット 表 A-5 ヨーロッパ地域言語のキャラクタ・セット(続き) 名前 説明 コメント TR8EBCDIC1026 EBCDIC コード・ページ 1026 8 ビット・トルコ語 SB TR8EBCDIC1026S EBCDIC コード・ページ 1026 サーバー 8 ビット・トルコ語 SB BLT8EBCDIC1112 EBCDIC コード・ページ 1112 8 ビット・バルト多言語 SB BLT8EBCDIC1112S EBCDIC コード・ページ 1112 サーバー 8 ビット・バルト多言語 SB D8EBCDIC1141 EBCDIC コード・ページ 1141 8 ビット・ドイツ語(オーストリア) SB、EURO DK8EBCDIC1142 EBCDIC コード・ページ 1142 8 ビット・デンマーク語 SB、EURO S8EBCDIC1143 EBCDIC コード・ページ 1143 8 ビット・スウェーデン語 SB、EURO I8EBCDIC1144 EBCDIC コード・ページ 1144 8 ビット・イタリア語 SB、EURO F8EBCDIC1147 EBCDIC コード・ページ 1147 8 ビット・フランス語 SB、EURO CL8EBCDIC1158 EBCDIC コード・ページ 1158 8 ビット・キリル文字 SB CL8EBCDIC1158R EBCDIC コード・ページ 1158 サーバー 8 ビット・キリル文字 SB EEC8EUROASCI EEC Targon 35 ASCI 西ヨーロッパ語 / ギリシア語 SB EEC8EUROPA3 EEC EUROPA3 8 ビット西ヨーロッパ語 / ギリシア語 SB LA8PASSPORT ドイツ政府プリンタ 8 ビット全ヨーロッパ・ラテン語 SB、ASCII WE8HP HP LaserJet 8 ビット西ヨーロッパ語 SB WE8ROMAN8 HP Roman8 8 ビット西ヨーロッパ語 SB、ASCII HU8CWI2 ハンガリア語 8 ビット CWI-2 SB、ASCII HU8ABMOD ハンガリア語 8 ビット特別 AB Mod SB、ASCII EL8EBCDIC423R RDBMS サーバー側用 IBM EBCDIC コード・ページ 423 SB LV8RST104090 IBM-PC 代替コード・ページ 8 ビット・ラトビア語(ラテン語 / キリル文字) SB、ASCII US8PC437 IBM-PC コード・ページ 437 8 ビット米語 SB、ASCII BG8PC437S IBM-PC コード・ページ 437 8 ビット(ブルガリア語の修正版) SB、ASCII EL8PC437S IBM-PC コード・ページ 437 8 ビット(ギリシア語の修正版) SB、ASCII EL8PC737 IBM-PC コード・ページ 737 8 ビット・ギリシア語 / ラテン語 SB LT8PC772 IBM-PC コード・ページ 772 8 ビット・リトアニア語(ラテン語 / キリル文字) SB、ASCII ロケール・データ A-13 キャラクタ・セット 表 A-5 ヨーロッパ地域言語のキャラクタ・セット(続き) 名前 説明 コメント LT8PC774 IBM-PC コード・ページ 774 8 ビット・リトアニア語(ラテン語) SB、ASCII BLT8PC775 IBM-PC コード・ページ 775 8 ビット・バルト語 SB、ASCII WE8PC850 IBM-PC コード・ページ 850 8 ビット西ヨーロッパ語 SB、ASCII EL8PC851 IBM-PC コード・ページ 851 8 ビット・ギリシア語 / ラテン語 SB、ASCII EE8PC852 IBM-PC コード・ページ 852 8 ビット東ヨーロッパ語 SB、ASCII RU8PC855 IBM-PC コード・ページ 855 8 ビット・ラテン語 / キリル文字 SB、ASCII TR8PC857 IBM-PC コード・ページ 857 8 ビット・トルコ語 SB、ASCII WE8PC858 IBM-PC コード・ページ 858 8 ビット西ヨーロッパ語 SB、ASCII、EURO WE8PC860 IBM-PC コード・ページ 860 8 ビット西ヨーロッパ語 SB、ASCII IS8PC861 IBM-PC コード・ページ 861 8 ビット・アイスランド語 SB、ASCII CDN8PC863 IBM-PC コード・ページ 863 8 ビット・フランス語(カナダ) SB、ASCII N8PC865 IBM-PC コード・ページ 865 8 ビット・ノルウェー語 SB、ASCII RU8PC866 IBM-PC コード・ページ 866 8 ビット・ラテン語 / キリル文字 SB、ASCII EL8PC869 IBM-PC コード・ページ 869 8 ビット・ギリシア語 / ラテン語 SB、ASCII LV8PC1117 IBM-PC コード・ページ 1117 8 ビット・ラトビア語 SB、ASCII US8ICL ICL EBCDIC 8 ビット米語 SB WE8ICL ICL EBCDIC 8 ビット西ヨーロッパ語 SB WE8ISOICLUK ICL 特別バージョン ISO8859-1 SB WE8ISO8859P1 ISO 8859-1 西ヨーロッパ語 SB、ASCII EE8ISO8859P2 ISO 8859-2 東ヨーロッパ語 SB、ASCII SE8ISO8859P3 ISO 8859-3 南ヨーロッパ語 SB、ASCII NEE8ISO8859P4 ISO 8859-4 北ヨーロッパ語および北東ヨーロッパ語 SB、ASCII CL8ISO8859P5 ISO 8859-5 ラテン語 / キリル文字 SB、ASCII AR8ISO8859P6 ISO 8859-6 ラテン語 / アラビア語 SB、ASCII EL8ISO8859P7 ISO 8859-7 ラテン語 / ギリシャ語 SB、ASCII、EURO IW8ISO8859P8 ISO 8859-8 ラテン語 / ヘブライ語 SB、ASCII A-14 Oracle Database グローバリゼーション・サポート・ガイド キャラクタ・セット 表 A-5 ヨーロッパ地域言語のキャラクタ・セット(続き) 名前 説明 コメント NE8ISO8859P10 ISO 8859-10 北ヨーロッパ語 SB、ASCII BLT8ISO8859P13 ISO 8859-13 バルト語 SB、ASCII CEL8ISO8859P14 ISO 8859-13 ケルト系言語 SB、ASCII WE8ISO8859P15 ISO 8859-15 西ヨーロッパ語 SB、ASCII、EURO LA8ISO6937 ISO 6937 8 ビット・テキスト通信用コード・キャラクタ・セット SB、ASCII CL8ISOIR111 ISOIR111 キリル文字 SB IW7IS960 イスラエル標準 960 7 ビット・ラテン語 / ヘブライ語 SB CL8KOI8U KOI8 キリル文字(ウクライナ) SB WE8EBCDIC1047E Latin 1/ オープン・システム 1047 SB、EBCDIC、EURO WE8EBCDIC924 Latin 9 EBCDIC 924 SB、EBCDIC BLT8CP921 ラトビア標準 LVS8-92(1) Windows/UNIX 8 ビット・バルト語 SB、ASCII LV8PC8LR ラトビア・バージョン IBM-PC コード・ページ 866 8 ビット・ ラテン語 / キリル文字 SB、ASCII AR8ARABICMAC Mac クライアント 8 ビット・ラテン語 / アラビア語 SB EE8MACCE Mac クライアント 8 ビット中央ヨーロッパ語 SB EE8MACCROATIAN Mac クライアント 8 ビット・クロアチア語 SB WE8MACROMAN8 Mac クライアント 8 ビット拡張 Roman8 西ヨーロッパ語 SB EL8MACGREEK Mac クライアント 8 ビット・ギリシア語 SB IS8MACICELANDIC Mac クライアント 8 ビット・アイスランド語 SB CL8MACCYRILLIC Mac クライアント 8 ビット・ラテン語 / キリル文字 SB TR8MACTURKISH Mac クライアント 8 ビット・トルコ語 SB TR8MACTURKISHS Mac サーバー 8 ビット・トルコ語 SB、ASCII AR8ARABICMACS Mac サーバー 8 ビット・ラテン語 / アラビア語 SB、ASCII EE8MACCES Mac サーバー 8 ビット中央ヨーロッパ語 SB、ASCII EE8MACCROATIANS Mac サーバー 8 ビット・クロアチア語 SB、ASCII WE8MACROMAN8S Mac サーバー 8 ビット拡張 Roman8 西ヨーロッパ語 SB、ASCII ロケール・データ A-15 キャラクタ・セット 表 A-5 ヨーロッパ地域言語のキャラクタ・セット(続き) 名前 説明 コメント CL8MACCYRILLICS Mac サーバー 8 ビット・ラテン語 / キリル文字 SB、ASCII EL8MACGREEKS Mac サーバー 8 ビット・ギリシア語 SB、ASCII IS8MACICELANDICS Mac サーバー 8 ビット・アイスランド語 SB BG8MSWIN MS Windows 8 ビット・ブルガリア・キリル文字 SB、ASCII LT8MSWIN921 MS Windows コード・ページ 921 8 ビット・リトアニア語 SB、ASCII ET8MSWIN923 MS Windows コード・ページ 923 8 ビット・エストニア語 SB、ASCII EE8MSWIN1250 MS Windows コード・ページ 1250 8 ビット東ヨーロッパ語 SB、ASCII、EURO CL8MSWIN1251 MS Windows コード・ページ 1251 8 ビット・ラテン語 / キリル文字 SB、ASCII、EURO WE8MSWIN1252 MS Windows コード・ページ 1252 8 ビット西ヨーロッパ語 EL8MSWIN1253 MS Windows コード・ページ 1253 8 ビット・ラテン語 / ギリシャ語 SB、ASCII、EURO TR8MSWIN1254 MS Windows コード・ページ 1254 8 ビット・トルコ語 SB、ASCII、EURO BLT8MSWIN1257 MS Windows コード・ページ 1257 8 ビット・バルト語 SB、ASCII、EURO WE8NCR4970 NCR 4970 8 ビット西ヨーロッパ語 SB、ASCII WE8NEXTSTEP NeXTSTEP ポストスクリプト 8 ビット西ヨーロッパ語 SB、ASCII CL8KOI8R RELCOM インターネット標準 8 ビット・ラテン語 / キリル文字 SB、ASCII US8BS2000 Siemens 9750-62 EBCDIC 8 ビット米語 SB DK8BS2000 Siemens 9750-62 EBCDIC 8 ビット・デンマーク語 SB F8BS2000 Siemens 9750-62 EBCDIC 8 ビット・フランス語 SB D8BS2000 Siemens 9750-62 EBCDIC 8 ビット・ドイツ語 SB E8BS2000 Siemens 9750-62 EBCDIC 8 ビット・スペイン語 SB S8BS2000 Siemens 9750-62 EBCDIC 8 ビット・スウェーデン語 SB DK7SIEMENS9780X Siemens 97801/97808 7 ビット・デンマーク語 SB F7SIEMENS9780X Siemens 97801/97808 7 ビット・フランス語 SB D7SIEMENS9780X Siemens 97801/97808 7 ビット・ドイツ語 SB I7SIEMENS9780X Siemens 97801/97808 7 ビット・イタリア語 SB N7SIEMENS9780X Siemens 97801/97808 7 ビット・ノルウェー語 SB A-16 Oracle Database グローバリゼーション・サポート・ガイド SB、ASCII、EURO キャラクタ・セット 表 A-5 ヨーロッパ地域言語のキャラクタ・セット(続き) 名前 説明 コメント E7SIEMENS9780X Siemens 97801/97808 7 ビット・スペイン語 SB S7SIEMENS9780X Siemens 97801/97808 7 ビット・スウェーデン語 SB EE8BS2000 Siemens EBCDIC.DF.04 8 ビット東ヨーロッパ語 SB WE8BS2000 Siemens EBCDIC.DF.04 8 ビット西ヨーロッパ語 SB WE8BS2000E Siemens EBCDIC.DF.04 8 ビット西ヨーロッパ語 SB、EURO CL8BS2000 Siemens EBCDIC.EHC.LC 8 ビット・キリル文字 SB WE8BS2000L5 Siemens EBCDIC.DF.L5 8 ビット西ヨーロッパ語 / トルコ語 SB CE8BS2000 Siemens EBCDIC.DF.04 8 ビット ケルト系言語 SB AL16UTF16 詳細は、A-20 ページの「ユニバーサル・キャラクタ・セット」を 参照してください。 MB、EURO、FIXED AL32UTF8 詳細は、A-20 ページの「ユニバーサル・キャラクタ・セット」を 参照してください。 MB、ASCII、EURO UTF8 詳細は、A-20 ページの「ユニバーサル・キャラクタ・セット」を 参照してください。 MB、ASCII、EURO UTFE 詳細は、A-20 ページの「ユニバーサル・キャラクタ・セット」を 参照してください。 MB、EURO ロケール・データ A-17 キャラクタ・セット 中東地域言語のキャラクタ・セット 表 A-6 に、中東地域の言語をサポートしている Oracle キャラクタ・セットを示します。 表 A-6 中東地域のキャラクタ・セット 名前 説明 コメント AR8APTEC715 APTEC 715 サーバー 8 ビット・ラテン語 / アラビア語 SB、ASCII AR8APTEC715T APTEC 715 8 ビット・ラテン語 / アラビア語 SB AR8ASMO708PLUS ASMO 708 Plus 8 ビット・ラテン語 / アラビア語 SB、ASCII AR8ASMO8X ASMO 拡張 708 8 ビット・ラテン語 / アラビア語 SB、ASCII AR8ADOS710 アラビア語 MS-DOS 710 サーバー 8 ビット・ラテン語 / アラビア語 SB、ASCII AR8ADOS710T アラビア語 MS-DOS 710 8 ビット・ラテン語 / アラビア語 SB AR8ADOS720 アラビア語 MS-DOS 720 サーバー 8 ビット・ラテン語 / アラビア語 SB、ASCII AR8ADOS720T アラビア語 MS-DOS 720 8 ビット・ラテン語 / アラビア語 SB TR7DEC DEC VT100 7 ビット・トルコ語 SB TR8DEC DEC 8 ビット・トルコ語 SB WE8EBCDIC37C EBCDIC コード・ページ 37 8 ビット Oracle/c SB IW8EBCDIC424 EBCDIC コード・ページ 424 8 ビット・ラテン語 / ヘブライ語 SB IW8EBCDIC424S EBCDIC コード・ページ 424 サーバー 8 ビット・ラテン語 / ヘブライ語 SB WE8EBCDIC500C EBCDIC コード・ページ 500 8 ビット Oracle/c SB IW8EBCDIC1086 EBCDIC コード・ページ 1086 8 ビット・ヘブライ語 SB AR8EBCDIC420S EBCDIC コード・ページ 420 サーバー 8 ビット・ラテン語 / アラビア語 SB AR8EBCDICX EBCDIC XBASIC サーバー 8 ビット・ラテン語 / アラビア語 SB TR8EBCDIC1026 EBCDIC コード・ページ 1026 8 ビット・トルコ語 SB TR8EBCDIC1026S EBCDIC コード・ページ 1026 サーバー 8 ビット・トルコ語 SB AR8HPARABIC8T HP 8 ビット・ラテン語 / アラビア語 SB TR8PC857 IBM-PC コード・ページ 857 8 ビット・トルコ語 SB、ASCII IW8PC1507 IBM-PC コード・ページ 1507/862 8 ビット・ラテン語 / ヘブライ語 SB、ASCII AR8ISO8859P6 ISO 8859-6 ラテン語 / アラビア語 SB、ASCII IW8ISO8859P8 ISO 8859-8 ラテン語 / ヘブライ語 SB、ASCII A-18 Oracle Database グローバリゼーション・サポート・ガイド キャラクタ・セット 表 A-6 中東地域のキャラクタ・セット(続き) 名前 説明 コメント AZ8ISO8859PE ISO 8859-9 ラテン語 / アゼルバイジャン語 SB、ASCII WE8ISO8859P9 ISO 8859-9 西ヨーロッパ語およびトルコ語 SB、ASCII LA8ISO6937 ISO 6937 8 ビット・テキスト通信用コード・キャラクタ・セット SB、ASCII IW7IS960 イスラエル標準 960 7 ビット・ラテン語 / ヘブライ語 SB IW8MACHEBREW Mac クライアント 8 ビット・ヘブライ語 SB AR8ARABICMAC Mac クライアント 8 ビット・ラテン語 / アラビア語 SB AR8ARABICMACT Mac 8 ビット・ラテン語 / アラビア語 SB TR8MACTURKISH Mac クライアント 8 ビット・トルコ語 SB IW8MACHEBREWS Mac サーバー 8 ビット・ヘブライ語 SB、ASCII AR8ARABICMACS Mac サーバー 8 ビット・ラテン語 / アラビア語 SB、ASCII TR8MACTURKISHS Mac サーバー 8 ビット・トルコ語 SB、ASCII TR8MSWIN1254 MS Windows コード・ページ 1254 8 ビット・トルコ語 SB、ASCII、EURO IW8MSWIN1255 MS Windows コード・ページ 1255 8 ビット・ラテン語 / ヘブライ語 SB、ASCII、EURO AR8MSWIN1256 MS Windows コード・ページ 1256 8 ビット・ラテン語 / アラビア語 SB、ASCII、EURO IN8ISCII 複数スクリプト・インド標準 8 ビット・ラテン語 / 諸インド語 SB AR8MUSSAD768 Mussa'd Alarabi/2 768 サーバー 8 ビット・ラテン語 / アラビア語 SB、ASCII AR8MUSSAD768T Mussa'd Alarabi/2 768 8 ビット・ラテン語 / アラビア語 SB AR8NAFITHA711 Nafitha 拡張 711 サーバー 8 ビット・ラテン語 / アラビア語 SB、ASCII AR8NAFITHA711T Nafitha 拡張 711 8 ビット・ラテン語 / アラビア語 SB AR8NAFITHA721 Nafitha International 721 サーバー 8 ビット・ラテン語 / アラビア語 SB、ASCII AR8NAFITHA721T Nafitha International 721 8 ビット・ラテン語 / アラビア語 SB AR8SAKHR706 SAKHR 706 サーバー 8 ビット・ラテン語 / アラビア語 SB、ASCII AR8SAKHR707 SAKHR 707 サーバー 8 ビット・ラテン語 / アラビア語 SB、ASCII AR8SAKHR707T SAKHR 707 8 ビット・ラテン語 / アラビア語 SB AR8XBASIC XBASIC 8 ビット・ラテン語 / アラビア語 SB WE8BS2000L5 Siemens EBCDIC.DF.04.L5 8 ビット西ヨーロッパ語 / トルコ語 SB ロケール・データ A-19 キャラクタ・セット 表 A-6 中東地域のキャラクタ・セット(続き) 名前 説明 コメント AL16UTF16 詳細は、A-20 ページの「ユニバーサル・キャラクタ・セット」を参照 してください。 MB、EURO、 FIXED AL32UTF8 詳細は、A-20 ページの「ユニバーサル・キャラクタ・セット」を参照 してください。 MB、ASCII、 EURO UTF8 詳細は、A-20 ページの「ユニバーサル・キャラクタ・セット」を参照 してください。 MB、ASCII、 EURO UTFE 詳細は、A-20 ページの「ユニバーサル・キャラクタ・セット」を参照 してください。 MB、EURO ユニバーサル・キャラクタ・セット 表 A-7 に、世界言語サポートを提供している Oracle キャラクタ・セットを示します。これ らのキャラクタ・セットは、アジア、ヨーロッパおよび中東地域の言語にかぎらず、それら を含めた世界中のすべての言語をサポートします。 表 A-7 ユニバーサル・キャラクタ・セット 名前 説明 コメント AL16UTF16 Unicode 3.2 UTF-16 ユニバーサル・キャラクタ・セット MB、EURO、FIXED AL32UTF8 Unicode 3.2 UTF-8 ユニバーサル・キャラクタ・セット MB、ASCII、EURO UTF8 Unicode 3.0 UTF-8 ユニバーサル・キャラクタ・セット、CESU-8 準拠 MB、ASCII、EURO UTFE Unicode 3.0 UTF-8 ユニバーサル・キャラクタ・セットの EBCDIC フォーム(UTF-EBCDIC) MB、EURO 注意 : CESU-8 では、補助文字の表現を除き、UTF-8 と同じ Unicode の コード体系が定義されています。CESU-8 では、補助文字が、UTF-16 の各 サロゲート・コードを UTF-8 の変換と同じ 8 ビット形式に変換した結果得 られる 6 バイトの順序として表されます。ただし、最初の入力のサロゲー ト・ペアからスカラー値への変換では行われません。Unicode テクニカ ル・レポート #26 を参照してください。 関連項目 : 第 6 章「Unicode を使用した多言語データベースのサポート」 A-20 Oracle Database グローバリゼーション・サポート・ガイド キャラクタ・セット キャラクタ・セット変換のサポート 次のキャラクタ・セット・エンコーディングは、変換専用としてサポートされています。 データベース・キャラクタ・セットまたは各国語キャラクタ・セットとしては使用できませ ん。 AL16UTF16LE ISO2022-CN ISO2022-JP ISO2022-KR HZ-GB-2312 これらのキャラクタ・セットは、CONVERT 関数で source_char_set または dest_char_ set に使用できます。 関連項目 : ■ ■ CONVERT 関数の詳細は、 『Oracle Database SQL リファレンス』を参照 してください。 9-6 ページ「CONVERT 関数」 サブセットとスーパーセット 表 A-8 に、一般的なサブセットとスーパーセットの関連を示します。 表 A-8 サブセットとスーパーセットのペア サブセット スーパーセット AR8ADOS710 AR8ADOS710T AR8ADOS720 AR8ADOS720T AR8ADOS720T AR8ADOS720 AR8APTEC715 AR8APTEC715T AR8ARABICMACT AR8ARABICMAC AR8ISO8859P6 AR8ASMO708PLUS AR8ISO8859P6 AR8ASMO8X AR8MUSSAD768 AR8MUSSAD768T AR8MUSSAD768T AR8MUSSAD768 AR8NAFITHA711 AR8NAFITHA711T AR8NAFITHA721 AR8NAFITHA721T AR8SAKHR707 AR8SAKHR707T ロケール・データ A-21 キャラクタ・セット 表 A-8 サブセットとスーパーセットのペア(続き) サブセット スーパーセット AR8SAKHR707T AR8SAKHR707 BLT8CP921 BLT8ISO8859P13 BLT8CP921 LT8MSWIN921 D7DEC D7SIEMENS9780X D7SIEMENS9780X D7DEC DK7SIEMENS9780X N7SIEMENS9780X I7DEC I7SIEMENS9780X I7SIEMENS9780X IW8EBCDIC424 IW8EBCDIC424 IW8EBCDIC1086 KO16KSC5601 KO16MSWIN949 LT8MSWIN921 BLT8ISO8859P13 LT8MSWIN921 BLT8CP921 N7SIEMENS9780X DK7SIEMENS9780X US7ASCII 表 A-9「US7ASCII のスーパーセット」を参照 してください。 UTF8 AL32UTF8 WE8DEC TR8DEC WE8DEC WE8NCR4970 WE8ISO8859P1 WE8MSWIN1252 WE8ISO8859P9 TR8MSWIN1254 WE8NCR4970 TR8DEC WE8NCR4970 WE8DEC WE8PC850 WE8PC858 US7ASCII は特殊で、非常に多くのキャラクタ・セットが US7ASCII のスーパーセットに なっています。表 A-9 に、US7ASCII のスーパーセットをリストします。 A-22 Oracle Database グローバリゼーション・サポート・ガイド キャラクタ・セット 表 A-9 US7ASCII のスーパーセット スーパーセット スーパーセット スーパーセット - EE8MACCES NEE8ISO8859P4 AL32UTF8 EE8MACCROATIANS RU8BESTA AR8ADOS710 EE8MSWIN1250 RU8PC855 AR8ADOS710T EE8PC852 RU8PC866 AR8ADOS720 EL8DEC SE8ISO8859P3 AR8ADOS720T EL8ISO8859P7 TH8MACTHAIS AR8APTEC715 EL8MACGREEKS TH8TISASCII AR8APTEC715T EL8MSWIN1253 TR8DEC AR8ARABICMACS EL8PC437S TR8MACTURKISHS AR8ASMO708PLUS EL8PC851 TR8MSWIN1254 AR8ASMO8X EL8PC869 TR8PC857 AR8HPARABIC8T ET8MSWIN923 US8PC437 AR8ISO8859P6 HU8ABMOD UTF8 AR8MSWIN1256 HU8CWI2 VN8MSWIN1258 AR8MUSSAD768 IN8ISCII VN8VN3 AR8MUSSAD768T IS8PC861 WE8DEC AR8NAFITHA711 IW8ISO8859P8 WE8DG AR8NAFITHA711T IW8MACHEBREWS WE8ISO8859P1 AR8NAFITHA721 IW8MSWIN1255 WE8ISO8859P15 AR8NAFITHA721T IW8PC1507 WE8ISO8859P9 AR8SAKHR706 JA16EUC WE8MACROMAN8S AR8SAKHR707 JA16SJIS WE8MSWIN1252 AR8SAKHR707T - WE8NCR4970 AZ8ISO8859PE - - BG8MSWIN - WE8NEXTSTEP BG8PC437S JA16VMS WE8PC850 BLT8CP921 KO16KSC5601 WE8PC858 BLT8ISO8859P13 KO16KSCCS WE8PC860 ロケール・データ A-23 言語およびキャラクタ・セット検出のサポート 表 A-9 US7ASCII のスーパーセット(続き) スーパーセット スーパーセット スーパーセット BLT8MSWIN1257 KO16MSWIN949 WE8ROMAN8 BLT8PC775 - ZHS16CGB231280 BN8BSCII LA8ISO6937 ZHS16GBK CDN8PC863 LA8PASSPORT ZHT16BIG5 CEL8ISO8859P14 LT8MSWIN921 ZHT16CCDC CL8ISO8859P5 LT8PC772 ZHT16DBT CL8KOI8R LT8PC774 ZHT16HKSCS CL8KOI8U LV8PC1117 ZHT16MSWIN950 CL8ISOIR111 LV8PC8LR ZHT32EUC CL8MACCYRILLICS LV8RST104090 ZHT32SOPS CL8MSWIN1251 N8PC865 ZHT32TRIS EE8ISO8859P2 NE8ISO8859P10 ZHS32GB18030 言語およびキャラクタ・セット検出のサポート 表 A-10 に、Character Set Scanner ユーティリティ(CSSCAN および LCSSCAN)と Globalization Development Kit(GDK)による言語とキャラクタ・セットの検出でサポート されている言語とキャラクタ・セットを示します。 各言語には、検出可能な複数のキャラクタ・セットがあります。 言語のバイナリ値が、サブセット / スーパーセット関係を持つ複数のエンコーディングと一 致する場合は、サブセットのキャラクタ・セットが戻されます。たとえば、言語がドイツ語 ですべての文字が 7 ビットの場合は、WE8MSWIN1252、WE8ISO8859P15 または WE8ISO8859P1 のかわりに US7ASCII が戻されます。 キャラクタ・セットが UTF-8 であると判別されると、テキスト内で 4 バイト文字(補助文 字)が検出されないかぎり、デフォルトで Oracle のキャラクタ・セット UTF8 が戻されま す。4 バイト文字が検出されると、キャラクタ・セットは AL32UTF8 としてレポートされま す。 A-24 Oracle Database グローバリゼーション・サポート・ガイド 言語およびキャラクタ・セット検出のサポート 表 A-10 CSSCAN、 、LCSSCAN および GDK でサポートされている言語とキャラクタ・セット 言語 キャラクタ・セット アラビア語 AL16UTF16、AL32UTF8、AR8ISO8859P6、AR8MSWIN1256、UTF8 ブルガリア語 AL16UTF16、AL32UTF8、CL8ISO8859P5、CL8MSWIN1251、UTF8 カタロニア語 AL16UTF16、AL32UTF8、US7ASCII、UTF8、WE8ISO8859P1、WE8ISO8859P15、 WE8MSWIN1252 クロアチア語 AL16UTF16、AL32UTF8、EE8ISO8859P2、EE8MSWIN1250、UTF8 チェコ語 AL16UTF16、AL32UTF8、EE8ISO8859P2、EE8MSWIN1250、UTF8 デンマーク語 AL16UTF16、AL32UTF8、US7ASCII、UTF8、WE8ISO8859P1、WE8ISO8859P15、 WE8MSWIN1252 オランダ語 AL16UTF16、AL32UTF8、US7ASCII、UTF8、WE8ISO8859P1、WE8ISO8859P15、 WE8MSWIN1252 英語 AL16UTF16、AL32UTF8、US7ASCII、UTF8、WE8ISO8859P1、WE8ISO8859P15、 WE8MSWIN1252 エストニア語 AL16UTF16、AL32UTF8、NEE8IOS8859P4、UTF8 フィンランド語 AL16UTF16、AL32UTF8、US7ASCII、UTF8、WE8ISO8859P1、WE8ISO8859P15、 WE8MSWIN1252 フランス語 AL16UTF16、AL32UTF8、US7ASCII、UTF8、WE8ISO8859P1、WE8ISO8859P15、 WE8MSWIN1252 ドイツ語 AL16UTF16、AL32UTF8、US7ASCII、UTF8、WE8ISO8859P1、WE8ISO8859P15、 WE8MSWIN1252 ギリシア語 AL16UTF16、AL32UTF8、EL8ISO8859P7、EL8MSWIN1253、UTF8 ヘブライ語 AL16UTF16、AL32UTF8、IW8ISO8859P8、IW8MSWIN1255、UTF8 ハンガリー語 AL16UTF16、AL32UTF8、EE8ISO8859P2、EE8MSWIN1250、UTF8 イタリア語 AL16UTF16、AL32UTF8、US7ASCII、UTF8、WE8ISO8859P1、WE8ISO8859P15、 WE8MSWIN1252 日本語 AL16UTF16、AL32UTF8、ISO2022-JP、JA16EUC、JA16SJIS、UTF8 韓国語 AL16UTF16、AL32UTF8、ISO2022-KR、KO16KSC5601、KO16MSWIN949、UTF8 マレー語 AL16UTF16、AL32UTF8、US7ASCII、UTF8、WE8ISO8859P1、WE8ISO8859P15、 WE8MSWIN1252 ノルウェー語 AL16UTF16、AL32UTF8、US7ASCII、UTF8、WE8ISO8859P1、WE8ISO8859P15、 WE8MSWIN1252 ロケール・データ A-25 言語およびキャラクタ・セット検出のサポート 表 A-10 CSSCAN、 、LCSSCAN および GDK でサポートされている言語とキャラクタ・セット(続き) 言語 キャラクタ・セット ポーランド語 AL16UTF16、AL32UTF8、EE8ISO8859P2、EE8MSWIN1250、UTF8 ポルトガル語 AL16UTF16、AL32UTF8、US7ASCII、UTF8、WE8ISO8859P1、WE8ISO8859P15、 WE8MSWIN1252 ルーマニア語 AL16UTF16、AL32UTF8、EE8ISO8859P2、EE8MSWIN1250、UTF8 ロシア語 AL16UTF16、AL32UTF8、CL8ISO8859P5、CL8KOI8R、CL8MSWIN1251、UTF8 簡体字中国語 AL16UTF16、AL32UTF8、HZ-GB-2312、UTF8、ZHS16GBK、ZHS16CGB231280 スロバキア語 AL16UTF16、AL32UTF8、EE8ISO8859P2、EE8MSWIN1250、UTF8 スペイン語 AL16UTF16、AL32UTF8、US7ASCII、UTF8、WE8ISO8859P1、WE8ISO8859P15、 WE8MSWIN1252 スウェーデン語 AL16UTF16、AL32UTF8、US7ASCII、UTF8、WE8ISO8859P1、WE8ISO8859P15、 WE8MSWIN1252 タイ語 AL16UTF16、AL32UTF8、TH8TISASCII、UTF8 繁体字中国語 AL16UTF16、AL32UTF8、UTF8、ZHT16MSWIN950 トルコ語 AL16UTF16、AL32UTF8、TR8MSWIN1254、UTF8、WE8ISO8859P9 A-26 Oracle Database グローバリゼーション・サポート・ガイド 言語ソート 言語ソート Oracle では、単一言語ソートと多言語ソートの 2 種類の言語ソートを提供しています。ま た、単一言語ソートを拡張することにより特殊な事例に対応できます。一般的に、 (接頭辞 X で表す)この特殊な事例とは、文字がその ASCII 値とは異なる順にソートされる場合を意 味します。たとえば、XSPANISH では、ch と ll が 1 つの文字として取り扱われます。 すべての言語ソートは、言語ソート名に _CI または _AI を追加し、それぞれ大 / 小文字ま たはアクセントを区別しないソートとして実行することもできます。 表 A-11 に、Oracle サーバーがサポートしている単一言語ソートを示します。 関連項目 : 各言語のデフォルト・ソートのリストは、A-2 ページの表 A-1 「Oracle がサポートしている言語」を参照してください。 表 A-11 単一言語ソート 基本名 拡張名 特殊な事例 ARABIC - - ARABIC_MATCH - - ARABIC_ABJ_SORT - - ARABIC_ABJ_MATCH - - ASCII7 - - AZERBAIJANI XAZERBAIJANI i、I、ドットなし小文字の i、ドット付き 大文字の I BENGALI - - BIG5 - - BINARY - - BULGARIAN - - CATALAN XCATALAN æ、AE、ß CROATIAN XCROATIAN D、L、N、d、l、n、ß CZECH XCZECH ch、CH、Ch、ß CZECH_PUNCTUATION XCZECH_ PUNCTUATION ch、CH、Ch、ß DANISH XDANISH A、ß、Å、å DUTCH XDUTCH ij、IJ EBCDIC - - ロケール・データ A-27 言語ソート 表 A-11 単一言語ソート(続き) 基本名 拡張名 特殊な事例 EEC_EURO - - EEC_EUROPA3 - - ESTONIAN - - FINNISH - - FRENCH XFRENCH - GERMAN XGERMAN ß GERMAN_DIN XGERMAN_DIN ß、ä、ö、ü、Ä、Ö、Ü GBK - - GREEK - - HEBREW - - HKSCS - - HUNGARIAN XHUNGARIAN cs、gy、ny、sz、ty、zs、ß、CS、Cs、 GY、Gy、NY、Ny、SZ、Sz、TY、Ty、 ZS、Zs ICELANDIC - - INDONESIAN - - ITALIAN - - LATIN - - LATVIAN - - LITHUANIAN - - MALAY - - NORWEGIAN - - POLISH - - PUNCTUATION XPUNCTUATION - ROMANIAN - - RUSSIAN - - SLOVAK XSLOVAK dz、DZ、Dz、ß(カロン) SLOVENIAN XSLOVENIAN ß A-28 Oracle Database グローバリゼーション・サポート・ガイド 言語ソート 表 A-11 単一言語ソート(続き) 基本名 拡張名 特殊な事例 SPANISH XSPANISH ch、ll、CH、Ch、LL、Ll SWEDISH - - SWISS XSWISS ß TURKISH XTURKISH æ、AE、ß UKRAINIAN - - UNICODE_BINARY - - VIETNAMESE - - WEST_EUROPEAN XWEST_EUROPEAN ß 表 A-12 に、Oracle で使用可能な多言語ソートを示します。これらすべては、GENERIC_M (ラテン語に基づく文字ソートの ISO 規格)を基礎として含んでいます。多言語ソートは、 ラテン語に基づく文字とともに、特定の主要な言語に使用されます。たとえば、KOREAN_ M は韓国語とラテン語に基づく文字はソートしますが、中国語、タイ語または日本語の文字 は照合しません。 表 A-12 多言語ソート ソート名 説明 CANADIAN_M フランス語(カナダ)のソートは、逆 2 次ソートで特殊な拡張文字をサポートしてい ます。 DANISH_M デンマーク語のソートは、大文字の前に小文字をソートします。 FRENCH_M フランス語のソートは、逆 2 次ソートをサポートしています。 GENERIC_M ISO14651 および Unicode の標準的な同値化規則(互換性のある同値化規則を除く)に 基づいた一般的なソート順序です。 JAPANESE_M 日本語のソートは、SJIS キャラクタ・セットのソート順序および SJIS には含まれない EUC 文字をサポートしています。 KOREAN_M 韓国語のソート : ハングル文字は Unicode のバイナリ順序に基づいてソートします。 ハンジャ文字は発音順に基づいてソートします。すべてのハングル文字がハンジャ文 字の前にソートされます。 SPANISH_M 従来のスペイン語のソートは、特殊な短縮文字をサポートしています。 THAI_M タイ語のソートは、一部の母音と子音について、文字の交換をサポートしています。 SCHINESE_RADICAL_M この簡体字中国語のソートは、最初に部首、次に画数に基づいて行います。 SCHINESE_STROKE_M この簡体字中国語のソートは、最初に画数、次に部首に基づいて行います。 ロケール・データ A-29 暦法 表 A-12 多言語ソート(続き) ソート名 説明 SCHINESE_PINYIN_M この簡体字中国語のソートは、ピンイン(中国語の発音記号)順に行います。 TCHINESE_RADICAL_M この繁体字中国語のソートは、最初に部首、次に画数に基づいて行います。 TCHINESE_STROKE_M この繁体字中国語のソートは、最初に画数、次に部首に基づいて行います。 補助文字がサポートされます。 関連項目 : 第 5 章「言語ソートと文字列検索」 暦法 デフォルトでは、ほとんどの地域定義でグレゴリオ暦が使用されています。表 A-11 に、 Oracle サーバーがサポートしているその他の暦法を示します。 表 A-13 サポートしている暦法 名前 デフォルトの日付書式 デフォルトの日付書式に使用する キャラクタ・セット Japanese Imperial(日本の元号暦) EEYYMMDD JA16EUC ROC Official(台湾暦) EEyymmdd ZHT32EUC Thai Buddha(タイ仏教暦) dd month EE yyyy TH8TISASCII Persian(ペルシャ暦) DD Month YYYY AR8ASMO8X Arabic Hijrah(イスラム歴) DD Month YYYY AR8ISO8859P6 English Hijrah(英語版イスラム歴) DD Month YYYY AR8ISO8859P6 図 A-1 に、Japanese Imperial(日本の元号暦)で 1998 年 3 月 27 日がどのように表示される かを示します。 A-30 Oracle Database グローバリゼーション・サポート・ガイド 暦法 図 A-1 Japanese Imperial(日本の元号暦)の例 (日本の元号暦)の例 ロケール・データ A-31 タイム・ゾーン名 タイム・ゾーン名 表 A-14 に、Oracle Database で提供されているデフォルトのタイム・ゾーン・ファイル内の タイム・ゾーン名を示します。デフォルトのタイム・ゾーン・ファイルは $ORACLE_HOME/oracore/zoneinfo/timezlrg.dat です。また、小さいタイム・ゾー ン・ファイル $ORACLE_HOME/oracore/zoneinfo/timezone/dat も提供されています。 タイム・ゾーン・ファイルの詳細は、第 4 章「日時データ型とタイム・ゾーン・サポート」 を参照してください。 表 A-14 タイム・ゾーン名 タイム・ゾーン名 小さいタイム・ゾーン・ ファイル内での有無 タイム・ゾーン名 Africa/Algiers 無 Australia/Perth 有 Africa/Cairo 有 Australia/Queensland 有 Africa/Casablanca 無 Australia/South 有 Africa/Ceuta 無 Australia/Sydney 有 Africa/Djibouti 無 Australia/Tasmania 有 Africa/Freetown 無 Australia/Victoria 有 Africa/Johannesburg 無 Australia/West 有 Africa/Khartoum 無 Australia/Yancowinna 有 Africa/Mogadishu 無 Brazil/Acre 有 Africa/Nairobi 無 Brazil/DeNoronha 有 Africa/Nouakchott 無 Brazil/East 有 Africa/Tripoli 有 Brazil/West 有 Africa/Tunis 無 CET 有 Africa/Windhoek 無 CST 有 America/Adak 有 CST6CDT 有 America/Anchorage 有 Canada/Atlantic 有 America/Anguilla 無 Canada/Central 有 America/Araguaina 無 Canada/East-Saskatchewan 有 America/Aruba 無 Canada/Eastern 有 America/Asuncion 無 Canada/Mountain 有 America/Atka 有 Canada/Newfoundland 有 A-32 Oracle Database グローバリゼーション・サポート・ガイド 小さいタイム・ゾーン・ ファイル内での有無 タイム・ゾーン名 表 A-14 タイム・ゾーン名(続き) タイム・ゾーン名 小さいタイム・ゾーン・ ファイル内での有無 タイム・ゾーン名 小さいタイム・ゾーン・ ファイル内での有無 America/Belem 無 Canada/Pacific 有 America/Boa_Vista 無 Canada/Saskatchewan 有 America/Bogota 無 Canada/Yukon 有 America/Boise 無 Chile/Continental 有 America/Buenos_Aires 無 Chile/EasterIsland 有 America/Cambridge_Bay 無 Cuba 有 America/Cancun 無 EET 有 America/Caracas 無 EST 有 America/Cayenne 無 EST5EDT 有 America/Cayman 無 Egypt 有 America/Chicago 有 Eire 有 America/Chihuahua 無 Etc/GMT 有 America/Costa_Rica 無 Etc/GMT+0 有 America/Cuiaba 無 Etc/GMT+1 有 America/Curacao 無 Etc/GMT+10 有 America/Dawson 無 Etc/GMT+11 有 America/Dawson_Creek 無 Etc/GMT+12 有 America/Denver 有 Etc/GMT+2 有 America/Detroit 有 Etc/GMT+3 有 America/Edmonton 有 Etc/GMT+4 有 America/El_Salvador 無 Etc/GMT+5 有 America/Ensenada 有 Etc/GMT+6 有 America/Fort_Wayne 有 Etc/GMT+7 有 America/Fortaleza 無 Etc/GMT+8 有 America/Godthab 無 Etc/GMT+9 有 America/Goose_Bay 無 Etc/GMT-0 有 America/Grand_Turk 無 Etc/GMT-1 有 ロケール・データ A-33 タイム・ゾーン名 表 A-14 タイム・ゾーン名(続き) タイム・ゾーン名 小さいタイム・ゾーン・ ファイル内での有無 タイム・ゾーン名 America/Guadeloupe 無 Etc/GMT-10 有 America/Guatemala 無 Etc/GMT-11 有 America/Guayaquil 無 - - America/Halifax 有 Etc/GMT-12 有 America/Havana 有 Etc/GMT-13 有 America/Indiana/Indianapolis 有 Etc/GMT-2 有 America/Indiana/Knox 無 Etc/GMT-3 有 America/Indiana/Marengo 無 Etc/GMT-4 有 America/Indiana/Vevay 無 Etc/GMT-5 有 America/Indianapolis 有 Etc/GMT-6 有 America/Inuvik 無 Etc/GMT-7 有 America/Iqaluit 無 Etc/GMT-8 有 America/Jamaica 有 Etc/GMT-9 有 America/Juneau 無 Etc/GMT0 有 America/Knox_IN 無 Etc/Greenwich 有 America/La_Paz 無 Europe/Amsterdam 無 America/Lima 無 Europe/Athens 無 America/Los_Angeles 有 Europe/Belfast 無 America/Louisville 無 Europe/Belgrade 無 America/Maceio 無 Europe/Berlin 無 America/Managua 無 Europe/Bratislava 無 America/Manaus 有 Europe/Brussels 無 America/Martinique 無 Europe/Bucharest 無 America/Mazatlan 有 Europe/Budapest 無 America/Mexico_City 有 Europe/Copenhagen 無 America/Miquelon 無 Europe/Dublin 有 America/Montevideo 無 Europe/Gibraltar 無 A-34 Oracle Database グローバリゼーション・サポート・ガイド 小さいタイム・ゾーン・ ファイル内での有無 タイム・ゾーン名 表 A-14 タイム・ゾーン名(続き) タイム・ゾーン名 小さいタイム・ゾーン・ ファイル内での有無 タイム・ゾーン名 小さいタイム・ゾーン・ ファイル内での有無 America/Montreal 有 Europe/Helsinki 無 America/Montserrat 無 Europe/Istanbul 有 America/New_York 有 Europe/Kaliningrad 無 America/Nome 無 Europe/Kiev 無 America/Noronha 有 Europe/Lisbon 有 America/Panama 無 Europe/Ljubljana 無 America/Phoenix 有 Europe/London 有 America/Porto_Acre 無 Europe/Luxembourg 無 America/Porto_Velho 無 Europe/Madrid 無 America/Puerto_Rico 無 Europe/Minsk 無 America/Rankin_Inlet 無 Europe/Monaco 無 America/Regina 有 Europe/Moscow 有 America/Rio_Branco 有 - - America/Santiago 有 Europe/Oslo 無 America/Sao_Paulo 有 Europe/Paris 無 America/Scoresbysund 無 Europe/Prague 無 America/Shiprock 有 Europe/Riga 無 America/St_Johns 有 Europe/Rome 無 America/St_Thomas 無 Europe/Samara 無 America/Swift_Current 無 Europe/San_Marino 無 America/Tegucigalpa 無 Europe/Sarajevo 無 America/Thule 無 Europe/Simferopol 無 America/Thunder_Bay 無 Europe/Skopje 無 America/Tijuana 有 Europe/Sofia 無 America/Tortola 無 Europe/Stockholm 無 America/Vancouver 有 Europe/Tallinn 無 America/Virgin 無 Europe/Tirane 無 ロケール・データ A-35 タイム・ゾーン名 表 A-14 タイム・ゾーン名(続き) タイム・ゾーン名 小さいタイム・ゾーン・ ファイル内での有無 タイム・ゾーン名 America/Whitehorse 有 Europe/Vatican 無 America/Winnipeg 有 Europe/Vienna 無 America/Yellowknife 無 Europe/Vilnius 無 Arctic/Longyearbyen 無 Europe/Warsaw 有 Asia/Aden 無 Europe/Zagreb 無 Asia/Almaty 無 Europe/Zurich 無 Asia/Amman 無 GB 有 Asia/Anadyr 無 GB-Eire 有 Asia/Aqtau 無 GMT 有 Asia/Aqtobe 無 GMT+0 有 Asia/Baghdad 無 GMT-0 有 Asia/Bahrain 無 GMT0 有 Asia/Baku 無 Greenwich 有 Asia/Bangkok 無 HST 有 Asia/Beirut 無 Hongkong 有 Asia/Bishkek 無 Iceland 有 Asia/Calcutta 有 Indian/Chagos 無 Asia/Chongqing 無 - - Asia/Chungking 無 Indian/Christmas 無 Asia/Dacca 無 Indian/Cocos 無 Asia/Damascus 無 Indian/Mayotte 無 Asia/Dhaka 無 - - Asia/Dubai 無 Indian/Reunion 無 Asia/Gaza 無 Iran 有 Asia/Harbin 無 Israel 有 Asia/Hong_Kong 有 Jamaica 有 Asia/Irkutsk 無 Japan 有 A-36 Oracle Database グローバリゼーション・サポート・ガイド 小さいタイム・ゾーン・ ファイル内での有無 タイム・ゾーン名 表 A-14 タイム・ゾーン名(続き) タイム・ゾーン名 小さいタイム・ゾーン・ ファイル内での有無 タイム・ゾーン名 小さいタイム・ゾーン・ ファイル内での有無 Asia/Istanbul 有 Kwajalein 有 Asia/Jakarta 無 Libya 有 Asia/Jayapura 無 MET 有 Asia/Jerusalem 有 MST 有 Asia/Kabul 無 MST7MDT 有 Asia/Kamchatka 無 Mexico/BajaNorte 有 Asia/Karachi 無 Mexico/BajaSur 有 Asia/Kashgar 無 Mexico/General 有 Asia/Krasnoyarsk 無 NZ 有 Asia/Kuala_Lumpur 無 NZ-CHAT 有 Asia/Kuching 無 Navajo 有 Asia/Kuwait 無 PRC 有 Asia/Macao 無 PST 有 Asia/Macau 無 - - Asia/Magadan 無 PST8PDT 有 Asia/Manila 無 Pacific/Auckland 有 Asia/Muscat 無 Pacific/Chatham 有 Asia/Nicosia 無 Pacific/Easter 有 Asia/Novosibirsk 無 Pacific/Fakaofo 無 Asia/Omsk 無 Pacific/Fiji 無 Asia/Qatar 無 Pacific/Gambier 無 Asia/Rangoon 無 Pacific/Guam 無 Asia/Riyadh 有 Pacific/Honolulu 有 Asia/Saigon 無 Pacific/Johnston 無 Asia/Seoul 有 Pacific/Kiritimati 無 Asia/Shanghai 有 Pacific/Kwajalein 有 Asia/Singapore 有 Pacific/Marquesas 無 ロケール・データ A-37 タイム・ゾーン名 表 A-14 タイム・ゾーン名(続き) タイム・ゾーン名 小さいタイム・ゾーン・ ファイル内での有無 タイム・ゾーン名 Asia/Taipei 有 Pacific/Midway 無 Asia/Tashkent 無 Pacific/Niue 無 Asia/Tbilisi 無 Pacific/Norfolk 無 Asia/Tehran 有 Pacific/Noumea 無 Asia/Tel_Aviv 有 Pacific/Pago_Pago 有 Asia/Tokyo 有 Pacific/Pitcairn 無 Asia/Ujung_Pandang 無 Pacific/Rarotonga 無 Asia/Urumqi 無 Pacific/Saipan 無 Asia/Vladivostok 無 Pacific/Samoa 有 Asia/Yakutsk 無 Pacific/Tahiti 無 Asia/Yekaterinburg 無 Pacific/Tongatapu 無 Asia/Yerevan 無 Pacific/Wake 無 Atlantic/Azores 無 Pacific/Wallis 無 Atlantic/Bermuda 無 Poland 有 Atlantic/Canary 無 Portugal 有 Atlantic/Faeroe 無 ROC 有 Atlantic/Madeira 無 ROK 有 Atlantic/Reykjavik 有 Singapore 有 Atlantic/St_Helena 無 Turkey 有 Atlantic/Stanley 無 US/Alaska 有 Australia/ACT 有 US/Aleutian 有 Australia/Adelaide 有 US/Arizona 有 Australia/Brisbane 有 US/Central 有 Australia/Broken_Hill 有 US/East-Indiana 有 Australia/Canberra 有 US/Eastern 有 Australia/Darwin 有 US/Hawaii 有 Australia/Hobart 有 US/Indiana-Starke 無 A-38 Oracle Database グローバリゼーション・サポート・ガイド 小さいタイム・ゾーン・ ファイル内での有無 廃止されたロケール・データ 表 A-14 タイム・ゾーン名(続き) タイム・ゾーン名 小さいタイム・ゾーン・ ファイル内での有無 タイム・ゾーン名 Australia/LHI 有 US/Michigan 有 Australia/Lindeman 有 US/Mountain 有 Australia/Lord_Howe 有 US/Pacific 有 Australia/Melbourne 有 US/Pacific-New 有 Australia/NSW 有 US/Samoa 有 Australia/North 有 UTC 無 - - W-SU 有 - - WET 有 関連項目 : 小さいタイム・ゾーン・ ファイル内での有無 4-19 ページ「タイム・ゾーン・ファイルの選択」 廃止されたロケール・データ この項では、廃止された言語ソート、キャラクタ・セット、言語および地域について説明し ます。 Oracle の言語および地域定義ファイルの更新 Oracle Database 10g では、一部の言語および地域定義ファイルの内容が変更されています。 Oracle でサポートされている言語および地域の一部では、ローカルの表記規則と一致しなく なったレガシー定義を修正するために、これらの更新が必要です。これらの変更には、通貨 記号、月名およびグループ・セパレータの変更が含まれます。その一例が、ブラジルのロー カル通貨記号です。この記号は、Oracle Database 10g では Cr$ から R$ に更新されていま す。 詳細な変更リストについては、$ORACLE_HOME/nls/data/old/data_changes.html ファイル内の「Oracle の言語定義と地域定義の変更」表を参照してください。 Oracle Database 10g のユーザーは、既存のアプリケーション・コードを検討し、Oracle Database 10g で定義されている正しい文化的な慣習が使用されていることを確認する必要が あります。アプリケーションのサポートに必要なコード変更を行えないユーザーのために、 Oracle Database 10g には Oracle9i のロケール定義ファイルが付属しています。 ロケール・データ A-39 廃止されたロケール・データ Oracle9i の言語および地域の動作に戻る手順は、次のとおりです。 1. データベースを停止します。 2. $ORACLE_HOME/nls/data/old ディレクトリから cr9idata.pl スクリプトを実行し ます。 3. ORA_NLS10 環境変数を、新規作成した $ORACLE_HOME/nls/data/9idata ディレク トリに設定します。 4. データベースを再起動します。 Oracle9i の定義ファイルに戻る必要があるすべての 10g データベース・クライアントについ て、手順 2 および 3 を繰り返す必要があります。 Oracle Database 10g のロケール定義ファイルを使用することをお薦めします。Oracle9i のロ ケール定義ファイルのサポートは、将来のリリースで廃止される予定です。 廃止になった言語ソート 表 A-15 に、Oracle Database 10g でサポートが廃止になった言語ソートを示します。 表 A-15 Oracle Database 10g で廃止になった言語ソート 廃止になったソート名 置換ソート THAI_TELEPHONE THAI_M THAI_DICTIONARY THAI_M CANADIAN_FRENCH CANADIAN_M JAPANESE JAPANESE_M 言語が RUSSIAN の場合にデフォルト地域でなくなった CIS Oracle Database 10g では、地域として RUSSIA が追加されています。これは、言語が RUSSIAN の場合のデフォルトの地域です。以前のリリースで言語が RUSSIAN の場合のデ フォルト地域だった CIS は、下位互換性を保つためにサポートされています。 YUGOSLAVIA 地域の廃止 Oracle Database 10g では、YUGOSLAVIA 地域は廃止されています。かわりに SERBIA AND MONTENEGRO を使用してください。 A-40 Oracle Database グローバリゼーション・サポート・ガイド 廃止されたロケール・データ 廃止になったキャラクタ・セットの新規名 Oracle のリリース 7.2 より前には、キャラクタ・セットを改名すると、その後のいくつかの リリースで、旧名が新規名とともにサポートされていました。リリース 7.2 以上では、旧名 はサポートされません。 表 A-16 に、影響を受けるキャラクタ・セットを示します。次のキャラクタ・セットをコー ド内で参照する場合は、新規名に置き換えてください。 表 A-16 廃止になったキャラクタ・セットの新規名 旧名 新規名 AL24UTFSS UTF8、AL32UTF8 AR8MSAWIN AR8MSWIN1256 CL8EBCDIC875S CL8EBCDIC875R EL8EBCDIC875S EL8EBCDIC875R JVMS JA16VMS JEUC JA16EUC SJIS JA16SJIS JDBCS JA16DBCS KSC5601 KO16KSC5601 KDBCS KO16DBCS CGB2312-80 ZHS16CGB231280 CNS 11643-86 ZHT32EUC JA16EUCFIXED なし。新しい各国語キャラクタ・セット UTF8 および AL16UTF16 に置換されました。 ZHS32EUCFIXED なし。新しい各国語キャラクタ・セット UTF8 および AL16UTF16 に置換されました。 ZHS16GBKFIXED なし。新しい各国語キャラクタ・セット UTF8 および AL16UTF16 に置換されました。 JA16DBCSFIXED なし。新しい各国語キャラクタ・セット UTF8 および AL16UTF16 に置換されました。 KO16DBCSFIXED なし。新しい各国語キャラクタ・セット UTF8 および AL16UTF16 に置換されました。 ZHS16DBCSFIXED なし。新しい各国語キャラクタ・セット UTF8 および AL16UTF16 に置換されました。 ZHS16CGB231280FIXED なし。新しい各国語キャラクタ・セット UTF8 および AL16UTF16 に置換されました。 ZHT16DBCSFIXED なし。新しい各国語キャラクタ・セット UTF8 および AL16UTF16 に置換されました。 KO16KSC5601FIXED なし。新しい各国語キャラクタ・セット UTF8 および AL16UTF16 に置換されました。 ロケール・データ A-41 廃止されたロケール・データ 表 A-16 廃止になったキャラクタ・セットの新規名(続き) 旧名 新規名 JA16SJISFIXED なし。新しい各国語キャラクタ・セット UTF8 および AL16UTF16 に置換されました。 ZHT16BIG5FIXED なし。新しい各国語キャラクタ・セット UTF8 および AL16UTF16 に置換されました。 ZHT32TRISFIXED なし。新しい各国語キャラクタ・セット UTF8 および AL16UTF16 に置換されました。 キャラクタ・セット CL8MSWINDOW31 は、サポートされなくなりました。新規キャラク タ・セット CL8MSWIN1251 は、実際には CL8MSWINDOW31 の複製で、以前のバージョ ンで省略されていた文字が一部含まれています。CL8MSWINDOW31 のかわりに CL8MSWIN1251 を使用してください。 AL24UTFFSS キャラクタ・セットのサポートの廃止 Unicode キャラクタ・セット AL24UTFFSS は、Oracle9i ではサポートされなくなりました。 AL24UTFFSS は、Unicode 規格 1.1 に基づく UTF-8 コード体系をサポートする Unicode キャラクタ・セットとしてバージョン 7 から導入されましたが、現在では不要と考えられま す。Oracle Database 10g では、Unicode 3.2 に基づく Unicode データベース・キャラクタ・ セット AL32UTF8 と、Unicode 3.0 に基づく UTF8 が提供されます。 既存の AL24UTFFSS データベースを移行する場合は、Oracle9i にアップグレードする前に UTF8 にアップグレードします。新規データベース・キャラクタ・セットへの移行について は、既存のデータベース・キャラクタ・セットを UTF8 に移行する前に、Character Set Scanner を使用してデータの分析を行うことをお薦めします。 関連項目 : 第 12 章「Character Set Scanner ユーティリティ」 ベンガル語定義の廃止 Oracle のベンガル語(BENGALI)定義には、Unicode 規格との互換性がありません。かわ りにバングラ語(BANGLA)定義を使用することをお薦めします。バングラ語は、Oracle9i データベース リリース 1(9.0.1)で導入されました。 ベンガル語定義は、Oracle Database 10g リリース 1(10.1)でサポートされていますが、将 来のリリースでサポートが廃止になる可能性があります。 チェコスロバキア地域定義の廃止 Oracle Database 10g リリース 1(10.1)では、チェコ共和国(CZECH REPUBLIC)または スロバキア(SLOVAKIA)地域定義を使用することをお薦めします。チェコスロバキア (CZECHOSLOVAKIA)地域定義は、Oracle Database 10g リリース 1(10.1)でサポートさ れていますが、将来のリリースでサポートが廃止になる可能性があります。 A-42 Oracle Database グローバリゼーション・サポート・ガイド B Unicode 文字コードの割当て この付録では、Unicode 文字の割当てを紹介します。この付録の内容は、次のとおりです。 ■ Unicode のコード範囲 ■ UTF-16 エンコーディング ■ UTF-8 エンコーディング Unicode 文字コードの割当て B-1 Unicode のコード範囲 Unicode のコード範囲 表 B-1 に、Unicode で UTF-16 文字コード用に割り当てられているコード範囲を示します。 表 B-1 UTF-16 文字コード用の Unicode 文字コード範囲 文字のタイプ 最初の 16 ビット 次の 16 ビット ASCII 0000-007F - ヨーロッパ語(ASCII を除く)、アラビア語、ヘブライ語 0080-07FF - インド語、タイ語、記号(ユーロ記号など) 、中国語、日本語、韓国語 0800-0FFF - 1000 - CFFF D000 - D7FF F900-FFFF Private Use Area #1 E000 - EFFF - F000 - F8FF 補助文字 : その他の中国語、日本語および韓国語の文字、旧漢字、音楽記号 および数学記号 Private Use Area #2 D800 - D8BF DC00 - DFFF D8C0 - DABF DC00 - DFFF DAC0 - DB7F DC00 - DFFF DB80 - DBBF DC00 - DFFF DBC0 - DBFF DC00 - DFFF 表 B-2 に、Unicode で UTF-8 文字コード用に割り当てられているコード範囲を示します。 表 B-2 UTF-8 文字コード用の Unicode 文字コード範囲 文字のタイプ 第 1 バイト 第 2 バイト 第 3 バイト 第 4 バイト ASCII 00-7F - - - ヨーロッパ語(ASCII を除く) 、アラビア語、 ヘブライ語 C2-DF 80-BF - - インド語、タイ語、記号(ユーロ記号など) 、 中国語、日本語、韓国語 E0 A0-BF 80-BF - E1-EC 80-BF 80-BF ED 80-9F 80-BF EF A4-BF 80-BF B-2 Oracle Database グローバリゼーション・サポート・ガイド UTF-16 エンコーディング 表 B-2 UTF-8 文字コード用の Unicode 文字コード範囲(続き) 文字のタイプ 第 1 バイト 第 2 バイト 第 3 バイト 第 4 バイト Private Use Area #1 EE 80-BF 80-BF - EF 80-A3 80-BF F0 90-BF 80-BF 80-BF F1-F2 80-BF 80-BF 80-BF F3 80-AF 80-BF 80-BF F3 B0-BF 80-BF 80-BF F4 80-8F 80-BF 80-BF 補助文字 : その他の中国語、日本語および韓国 語の文字、旧漢字、音楽記号および数学記号 Private Use Area #2 注意 : 空白は、適用外のコード割当てを示します。文字コードは 16 進表 現で示されています。 UTF-16 エンコーディング 表 B-1 のように、一部の文字(その他の中国語 / 日本語 / 韓国語の文字および Private Use Area #2)の UTF-16 文字コードは、2 単位の 16 ビットで表現されます。これらは補助文字 です。1 つの補助文字は、2 つの 16 ビット値で構成されています。最初の 16 ビット値は 0xD800 ~ 0xDBFF の範囲内でエンコードされます。次の 16 ビット値は 0xDC00 ~ 0xDFFF の範囲内でエンコードされます。補助文字を使用すると、UTF-16 文字コードは 100 万種類 以上の文字を表現できます。補助文字を使用しなければ、65,536 文字しか表現できません。 Oracle の AL16UTF16 キャラクタ・セットは、補助文字をサポートしています。 関連項目 : 6-3 ページ「補助文字」 Unicode 文字コードの割当て B-3 UTF-8 エンコーディング UTF-8 エンコーディング 表 B-2 の UTF-8 文字コードは、次の条件が適用されることを示しています。 ■ ■ ■ ASCII 文字には 1 バイトを使用します。 ヨーロッパ語(ASCII を除く) 、アラビア語およびヘブライ語の文字の場合は、2 バイト 必要です。 インド語、タイ語、中国語、日本語および韓国語の文字、およびユーロなどの記号の場 合は、3 バイト必要です。 ■ Private Use Area #1 の文字の場合は、3 バイト必要です。 ■ 補助文字の場合は、4 バイト必要です。 ■ Private Use Area #2 の文字の場合は、4 バイト必要です。 Oracle の AL32UTF8 キャラクタ・セットは、1 バイト、2 バイト、3 バイトおよび 4 バイト 値をサポートしています。Oracle の UTF8 キャラクタ・セットは、1 バイト、2 バイトおよ び 3 バイト値をサポートしていますが、4 バイト値はサポートしていません。 B-4 Oracle Database グローバリゼーション・サポート・ガイド 用語集 AL16UTF16 SQL NCHAR データ型に使用されるデフォルトの Oracle キャラクタ・セットで、各国語 キャラクタ・セットに使用される。このキャラクタ・セットは、Unicode データを UTF-16 エンコーディングでエンコードする。 関連項目 : 各国語キャラクタ・セット(national character set) AL32UTF8 SQL CHAR データ型に使用される Oracle キャラクタ・セットで、データベース・キャラク タ・セットに使用される。このキャラクタ・セットは、Unicode データを UTF-8 エンコー ディングでエンコードする。 関連項目 : データベース・キャラクタ・セット(database character set) ASCII 米国の情報交換標準コード。英語用のエンコードされた共通 7 ビット・キャラクタ・セッ ト。ASCII には、文字 A ~ Z と a ~ z、数字、句読点記号および制御文字が含まれる。 Oracle キャラクタ・セット名は US7ASCII である。 EBCDIC 拡張 2 進化 10 進コード。IBM システムで最も使用されるエンコードされたキャラクタ・ セット・ファミリ。 ISO 国際標準化機構(ISO)。130 か国からなる標準機関の世界的な連合。ISO では、世界規模の 規格を開発および促進し、商品やサービスの国際的な交流を容易にすることを目的としてい る。 用語集 -1 ISO 14651 ほとんどの言語向けに設計された国際的な多言語ソート規格。 関連項目 : 多言語ソート(multilingual linguistic sort) ISO 8859 8 ビットのエンコードされたキャラクタ・セット・ファミリ。最も一般的なものは、ISO 8859-1(ISO Latin-1 として知られている)で、西ヨーロッパ諸国で使用されている。 ISO Latin-1 ISO 8859-1 キャラクタ・セット規格。ASCII に対する 8 ビット拡張機能で、西ヨーロッパで 最も頻繁に使用される共通のラテン文字を含む 128 文字が追加されている。Oracle キャラク タ・セット名は、WE8ISO8859P1 である。 関連項目 : ISO 8859 ISO/IEC 10646 現在、世界で使用されているほとんどの主要文字を定義しているユニバーサル・キャラク タ・セットの規格。1993 年には、ISO によって Unicode バージョン 1.1 が ISO/IEC 10646-1:1993 として承認されている。ISO/IEC 10646 には、2 バイト固定幅形式の UCS-2 と 4 バイト固定幅形式の UCS-4 がある。実装には 3 つのレベルがあり、すべてのレベルは複合 文字のサポートに関係する。 ■ ■ ■ レベル 1 では、複合文字をサポートする必要はない。 レベル 2 では、特定の文字(アラビア文字、タイ文字などのほとんどの Unicode 文字を 含む)をサポートする必要がある。 レベル 3 では、あらゆる言語の複合文字を無制限にサポートする必要がある。 ISO 通貨(ISO currency) ) 通貨( 各国通貨を示すために使用される 3 文字の略称で、ISO 4217 規格に基づいている。たとえ ば、USD は米国のドルを表す。 NLB ファイル(NLB files) ) ファイル( ロケール固有のデータを定義するために Locale Builder が使用するバイナリ・ファイル。こ のファイルでは、特定リリースの Oracle データベース・サーバーに付属するロケール定義 がすべて定義される。Oracle Locale Builder を使用すると、ユーザー定義の NLB ファイル を作成できる。 関連項目 : Oracle Locale Builder および NLT ファイル(NLT files) NLS National Language Support。NLS によって、ユーザーは母国語でデータベースと対話でき る。さらに、アプリケーションを様々な言語および文化の環境で実行できる。Oracle はかつ てグローバル・ユーザーをサポートしていたため、この用語は幾分古い。 用語集 -2 NLSRTL National Language Support ランタイム・ライブラリ。このライブラリは、ロケールに依存 しない国際化に関するアルゴリズムを提供する。ロケール固有の情報(つまり、NLSDATA) は、実行中に NLSRTL ライブラリによって読み込まれる。 NLT ファイル(NLT files) ) ファイル( ロケール固有のデータを定義するために Locale Builder が使用するテキスト・ファイル。 このファイルはテキスト形式なので、内容を表示できる。 Oracle Locale Builder ロケール固有のデータを表示、変更または定義する方法を提供する GUI ユーティリティ。 言語、地域、キャラクタ・セットおよび言語ソートについて、独自の形式を作成することも できる。 SQL CHAR データ型(SQL CHAR datatypes) ) データ型( CHAR、VARCHAR、VARCHAR2、CLOB および LONG データ型が含まれる。 SQL NCHAR データ型(SQL NCHAR datatypes) ) データ型( NCHAR、NVARCHAR、NVARCHAR2 および NCLOB データ型が含まれる。 UCS-2 1993 ISO/IEC 規格のキャラクタ・セット。固定幅の 16 ビット Unicode キャラクタ・セット である。各文字は 16 ビットの領域を持つ。ISO Latin-1 文字は最初の 256 コード・ポイント であり、ISO Latin-1 の 16 ビット拡張と見なすことができる。 UCS-4 固定幅の 32 ビット Unicode キャラクタ・セット。各文字は 32 ビットの領域を持つ。UCS-2 の文字はこの規格の最初の 65,536 コード・ポイントであるため、UCS-2 の 32 ビット拡張と みなすことができる。ISO-10646 と呼ばれる場合もある。 Unicode エンコードされたユニバーサル・キャラクタ・セット。Unicode を使用すると、1 つのキャ ラクタ・セットを使用して任意の言語の情報を格納できる。Unicode には、プラットフォー ム、プログラムまたは言語に関係なく、すべての文字に対する一意のコード値が用意されて いる。 Unicode コード・ポイント(Unicode code point) ) コード・ポイント( Unicode コード領域にある 0 ~ 0x10FFFF の値。Unicode では、各文字に一意のコード・ ポイントが割り当てられる。 用語集 -3 Unicode データ型(Unicode datatype) ) データ型( SQL NCHAR データ型(NCHAR、NVARCHAR2 および NCLOB)。データベース・キャラクタ・ セットが Unicode でない場合も、これらのデータ型の列に Unicode 文字を格納できる。 Unicode データベース(Unicode database) ) データベース( データベース・キャラクタ・セットが UTF-8 のデータベース。 UTF8 UTF8 Oracle キャラクタ・セットは、文字を 1 バイト、2 バイトまたは 3 バイトでエンコー ドする。ASCII ベースのプラットフォーム用。UTF8 キャラクタ・セットでは Unicode 3.0 がサポートされている。Unicode 3.1 では、特定の補助文字にコード・ポイントが割り当て られていなかったが、Unicode 3.0 では補助文字用のコード・ポイント範囲が割り当てられ ていた。補助文字は、6 バイトを占める 2 つの別個のユーザー定義文字として処理される。 UTF-8 Unicode の 8 ビット・エンコーディング。可変幅エンコーディングである。UTF-8 エンコー ディングでは、1 つの Unicode 文字を、1 バイト、2 バイト、3 バイトまたは 4 バイトで表す ことができる。ヨーロッパ言語の文字は、1 バイトまたは 2 バイトで表す。ほとんどのアジ ア言語の文字は、3 バイトで表す。補助文字は、4 バイトで表す。 UTF-16 Unicode の 16 ビット・エンコーディング。UCS-2 の拡張であり、UCS-2 コード・ポイント のペアを使用して、Unicode 3.1 に定義されている補助文字をサポートする。UTF-16 エン コーディングでは、1 つの Unicode 文字を、2 バイトか 4 バイトで表すことができる。ヨー ロッパ言語とほとんどのアジア言語の文字(ASCII 文字を含む)は、ともに 2 バイトで表 す。補助文字は、4 バイトで表す。 UTFE 6 バイト補助文字のサポート付き Unicode 3.0 UTF-8 Oracle データベース・キャラクタ・ セット。EBCDIC プラットフォームでのみ使用される。 アクセント(accent) ) アクセント( 文字の発音を変更する記号。アクセント アクセントの一般的な意味は文字の強勢または強調に関連して アクセント いるため、 『Oracle Database グローバリゼーション・サポート・ガイド』では発言区別記号 発言区別記号 という用語を使用する。 関連項目 : 発音区別記号(diacritic) アクセントを区別しない言語ソート(accent-insensitive linguistic sort) ) アクセントを区別しない言語ソート( 発音区別記号や大 / 小文字ではなく、ベース文字に関する情報のみを使用するソート。 関連項目 : 言語ソート(linguistic sort) 、ベース文字(base letter) 、発音区別記号 (diacritic)およびケース(case) 用語集 -4 絵文字(glyph) ) 絵文字( 文字の固有の表現。1 つの文字は、多数の異なる絵文字を持つことができる。たとえば、英 大文字の最初の文字は、A、A、A のように印字または表示される。これらの形式は、同じ 文字を表現する異なる絵文字である。 関連項目 : 文字(character) エンコーディング値(encoded value) ) エンコーディング値( キャラクタ・セットの 1 文字の数値表現。たとえば、ASCII キャラクタ・セットでは、A の コード・ポイントは 0x41 である。文字のエンコーディング値は、その文字のコード・ポイ コード・ポイ ントとも呼ばれる。 ント エンコードされたキャラクタ・セット(encoded character set) ) エンコードされたキャラクタ・セット( 文字コード体系が関連付けられているキャラクタ・セット。エンコードされたキャラクタ・ セットは、各文字に割り当てる番号(文字コード)を指定する。 関連項目 : 文字コード体系(character encoding scheme) 大 / 小文字の変換(case conversion) ) 小文字の変換( ある文字を大文字から小文字に、または小文字から大文字に変換すること。 大 / 小文字を区別しない言語ソート(case-insensitive linguistic sort) ) 小文字を区別しない言語ソート( 大 / 小文字ではなく、ベース文字と発音区別記号に関する情報を使用するソート。 関連項目 : ベース文字(base letter) 、ケース(case)、発音区別記号(diacritic) および言語ソート(linguistic sort) 各国語キャラクタ・セット(national character set) ) 各国語キャラクタ・セット( NCHAR、NVARCHAR2 および NCLOB 列に指定できるデータベース・キャラクタ・セットの代 替キャラクタ・セット。各国語キャラクタ・セットは Unicode 内のみである。 キャラクタ・セット(character set) ) キャラクタ・セット( 特定の言語または言語グループのテキスト情報を表す要素の集まり。1 つの言語を複数の キャラクタ・セットで表現できる。 キャラクタ・セットは、必ずしも特定の文字コード体系を示すわけではない。文字コード体 系は、キャラクタ・セットの各文字に対する文字コードの割当てである。 このマニュアルでは、通常、キャラクタ・セットは特定の文字コード体系を示している。し たがって、このマニュアルでは、キャラクタ・セットとエンコードされたキャラクタ・セッ トは同じである。 キャラクタ・セットの移行 既存のデータベースのキャラクタ・セットを変更すること。 用語集 -5 キャラクタ・セマンティクス(character semantics) ) キャラクタ・セマンティクス( 文字列を一連の文字として取り扱うこと。 関連項目 : バイト・セマンティクス(byte semantics)および長さセマンティクス (length semantics) クライアント・キャラクタ・セット(client character set) ) クライアント・キャラクタ・セット( クライアントで使用される、エンコードされたキャラクタ・セット。クライアント・キャラ クタ・セットは、サーバーのキャラクタ・セットとは異なる場合がある。サーバーのキャラ クタ・セットは、データベース・キャラクタ・セット データベース・キャラクタ・セットと呼ばれる。クライアント・キャラク データベース・キャラクタ・セット タ・セットがデータベース・キャラクタ・セットと異なる場合は、キャラクタ・セット変換 が必要である。 関連項目 : データベース・キャラクタ・セット(database character set) グローバリゼーション(globalization) ) グローバリゼーション( ソフトウェアを多様な言語および文化の環境に適したものにするプロセス。グローバリゼー ションとローカライゼーションは異なるものである。ローカライゼーションとは、ソフト ウェアをある固有のロケールで使用できるように準備するプロセスである。 ケース(case) ) ケース( 大文字であるか小文字であるかの条件を指す。たとえばラテン・アルファベットの A は、 小文字の絵文字 a の大文字。 言語索引(linguistic index) ) 言語索引( 言語上のソート順序に基づいた索引。 言語ソート(linguistic sort) ) 言語ソート( 文字列のバイナリ表現ではなく、ロケールに関する要件に基づいた文字列の順序付け。 関連項目 : 多言語ソート(multilingual linguistic sort)および単一言語ソート (monolingual linguistic sort) コード単位(code unit) ) コード単位( エンコードされたテキストを処理および交換する単位。コード単位のサイズは、文字コード 体系に応じて異なる。ほとんどの文字エンコーディングでは、コード単位は 1 バイト。ただ し、UTF-16 と UCS-2 の場合は 2 バイトのコード単位が使用され、ワイド・キャラクタの場 合は 4 バイトが使用される。 関連項目 : 文字コード体系(character encoding scheme) 用語集 -6 コード・ポイント(code point) ) コード・ポイント( キャラクタ・セットの 1 文字の数値表現。たとえば、ASCII キャラクタ・セットでは、A の コード・ポイントは 0x41 である。文字のコード・ポイントは、その文字のエンコーディン エンコーディン グ値とも呼ばれる。 グ値 関連項目 : Unicode コード・ポイント(Unicode code point) サロゲート・ペア(surrogate pairs) ) サロゲート・ペア( 関連項目 : 補助文字(supplementary characters) 照合(collation) ) 照合( 特定のロケールの言語に関連付けられた文字のソートに関する規則に従って文字列を順序付 けすること。言語ソート 言語ソートとも呼ばれる。 言語ソート 関連項目 : 言語ソート(linguistic sort) 、単一言語ソート(monolingual linguistic sort) 、多言語ソート(multilingual linguistic sort) 、アクセントを区別しない言語 ソート(accent-insensitive linguistic sort)および大 / 小文字を区別しない言語ソー ト(case-insensitive linguistic sort) シングルバイト(single-byte) ) シングルバイト( 1 バイト。1 バイトは、通常 8 ビットで構成される。特定の言語のすべての文字に文字コー ドを割り当てる場合、1 バイト(8 ビット)では 256 の異なる文字を表現できる。 関連項目 : マルチバイト(multibyte) シングルバイト文字(single-byte character) ) シングルバイト文字( ある文字コード体系で、1 バイトの文字コードで構成される文字。コード体系が異なると、 同じ文字に異なる文字コードが対応する場合がある。使用しているコード体系が不明な場 合、Oracle ではどの文字がシングルバイト文字であるかを判断できない。たとえば、ユーロ 通貨記号は、WE8MSWIN1252 のエンコードされたキャラクタ・セットでは 1 バイト、 AL16UTF16 では 2 バイト、UTF8 では 3 バイトである。 関連項目 : マルチバイト・キャラクタ(multibyte character) シングルバイト文字列(single-byte character string) ) シングルバイト文字列( 次のいずれかで構成される文字列。 ■ 文字なし(ヌル文字列 ヌル文字列と呼ばれる) ヌル文字列 ■ 1 つ以上のシングルバイト文字 スクリプト(script) ) スクリプト( 記述法で使用される関連する図形記号の集まり。一部のスクリプトは複数の言語を表現でき る。また、言語によっては複数のスクリプトを使用するものもある。スクリプトの例とし て、ラテン文字、アラビア文字および漢字がある。 用語集 -7 制限付き多言語サポート(restricted multilingual support) ) 制限付き多言語サポート( 関連する言語のグループに制限された多言語サポート。西ヨーロッパ諸国の言語は、ISO 8859-1 などで表現される。多言語サポートが制限付きの場合、タイ語は言語グループに追加 できない。 多言語ソート(multilingual linguistic sort) ) 多言語ソート( 3 つのレベルで文字列を評価する Oracle ソート。アジア言語の場合は、1 言語によるデータ しか存在しない場合にも、多言語ソートが必要である。多言語ソートは、複数言語による データが存在する場合にも使用される。 単一言語サポート(monolingual support) ) 単一言語サポート( 1 つの言語のみのサポート。 単一言語ソート(monolingual linguistic sort) ) 単一言語ソート( 文字列を 2 つのレベルで比較する Oracle ソート。単一言語ソートを使用すると、ヨーロッ パ地域の大半の言語はソートできるが、アジア地域の言語には不向きである。 関連項目 : 多言語ソート(multilingual linguistic sort) 置換文字(replacement character) ) 置換文字( ソース文字がターゲット・キャラクタ・セットにない場合、その文字の変換時に使用される 文字。たとえば、Oracle では多くの場合 ? がデフォルトの置換文字として使用される。 データ・スキャニング(data scanning) ) データ・スキャニング( データベース・キャラクタ・セットの移行前に、キャラクタ・セット変換とデータの切捨て に伴う問題の可能性を識別するプロセス。 データベース・キャラクタ・セット(database character set) ) データベース・キャラクタ・セット( テキストをデータベースに格納するために使用される、エンコードされたキャラクタ・セッ ト。CHAR、VARCHAR2、LONG および固定幅の CLOB 列の値と、すべての SQL および PL/SQL テキストが含まれる。 長さセマンティクス(length semantics) ) 長さセマンティクス( 文字列の長さの取扱い方法を決定する。文字列の長さは、一連の文字またはバイトとして取 り扱うことができる。 関連項目 : キャラクタ・セマンティクス(character semantics)およびバイト・ セマンティクス(byte semantics) ヌル文字列(null string) ) ヌル文字列( 文字が含まれていない文字列。 用語集 -8 バイト・セマンティクス(byte semantics) ) バイト・セマンティクス( 文字列を一連のバイトとして取り扱うこと。 関連項目 : キャラクタ・セマンティクス(character semantics)および長さセマン ティクス(length semantics) バイナリ・ソート(binary sorting) ) バイナリ・ソート( バイナリ・コード値に基づいた文字列の順序付け。 発音区別記号(diacritic) ) 発音区別記号( 文字または文字列の上または下にある記号で、それが付いていない場合の文字とは発音が異 なることを示す。たとえば、façade の場合、セディラは発音区別記号である。セディラが 付いている場合は、c の発音が変化する。 表意文字(ideograph) ) 表意文字( 概念を表現する記号。表意的記述法の例に中国語がある。 表音文字セット(syllabary) ) 表音文字セット( 日本語などの言語で使用する表意文字とともに表音的情報を伝達する方法を提供する。 標準的な同値化(canonical equivalence) ) 標準的な同値化( 文字間または文字列間の基本的な同値化。たとえば、ç は c と , の組合せと同じ。正常にレ ンダリングされている場合は、両者を区別できない。 フォント(font) ) フォント( キャラクタ・セット内の文字をグラフィカルに表現する順序付けられた絵文字の集まり。 ベース文字(base letter) ) ベース文字( 発音区別記号なしの文字。たとえば、a、A、ä および Ä のベース文字は a。 関連項目 : 発音区別記号(diacritic) 補助文字(supplementary characters) ) 補助文字( Unicode の最初のバージョンは 16 ビットの固定幅エンコーディングで、各文字のエンコー ディングに 2 バイトを使用していた。このため、65,536 文字を表現できた。しかし、アジア 言語の多数の表意文字の関係で、より多くの文字のサポートが必要となっている。 Unicode 3.1 では、このニーズを満たすために補助文字が定義されている。Unicode 3.1 で は、2 つの 16 ビット・コード単位(サロゲート・ペア サロゲート・ペアとも呼ばれる)を使用して、1 つの文 サロゲート・ペア 字が表現される。このため、さらに 1,048,576 文字の定義が可能である。Unicode 3.1 規格に は、最初のグループとして 44,944 文字の補助文字が追加された。 用語集 -9 マルチバイト(multibyte) ) マルチバイト( 2 バイト以上であること。 特定の言語(または言語グループ)のすべての文字に対して文字コードが割り当てられた場 合は、1 バイト(8 ビット)では 256 の異なる文字を表現できる。2 バイト(16 ビット)で は、65,536 の異なる文字を表現できる。すべての文字を表現するために、2 バイトでは不十 分な言語も多い。一部の文字には 3 または 4 バイト必要である。 たとえば、Unicode の UTF8 エンコーディングがある。UTF8 には、多数の 2 バイトおよび 3 バイトの文字がある。 また、台湾で使用する繁体字中国語もこの例の 1 つ。この言語では、80,000 以上の文字が使 用される。台湾で使用されている一部の文字コード体系は、4 バイトを使用して文字をエン コードする。 関連項目 : シングルバイト(single-byte) マルチバイト・キャラクタ(multibyte character) ) マルチバイト・キャラクタ( ある文字コード体系で、2 バイト以上の文字コードから構成される文字。 コード体系が異なると、同じ文字に異なる文字コードが対応する場合がある。使用している 文字コード体系が不明な場合、Oracle では文字がマルチバイト・キャラクタであるかどうか を判断できない。たとえば、日本語の半角カタカナ文字は、JA16SJIS のエンコードされた キャラクタ・セットでは 1 バイト、JA16EUC では 2 バイト、UTF8 では 3 バイトである。 関連項目 : シングルバイト文字(single-byte character) マルチバイト・キャラクタ文字列(multibyte character string) ) マルチバイト・キャラクタ文字列( 次のいずれかで構成される文字列。 ■ 文字なし(ヌル文字列 ヌル文字列と呼ばれる) ヌル文字列 ■ 1 つ以上のシングルバイト文字 ■ 1 つ以上のシングルバイト文字と 1 つ以上のマルチバイト文字の混合 ■ 1 つ以上のマルチバイト文字 無制限多言語サポート(unrestricted multilingual support) ) 無制限多言語サポート( 要求に応じて多数の言語を使用するための機能。Unicode などのユニバーサル・キャラク タ・セットを使用すると、無制限に多言語をサポートできるようになる。ユニバーサル・ キャラクタ・セットでは大規模な文字レパートリをサポートしている。この文字レパートリ には世界のほとんどの現代語が含まれている。 用語集 -10 文字(character) ) 文字( テキストの抽象要素。文字は、その文字の特定の表現である絵文字とは異なる。たとえば、 英大文字の最初の文字は、A、A、A のように表示される。これらの形式は、同じ文字を表 現する異なる絵文字である。文字、文字コードおよび絵文字には、次のような関連がある。 文字 --(エンコーディング)--> 文字コード --(フォント)--> 絵文字 たとえば、英大文字の最初の文字は、コンピュータのメモリーでは数値として表される。こ の数値は、エンコーディング エンコーディングまたは文字コード 文字コードと呼ばれる。英大文字の最初の文字の文字 エンコーディング 文字コード コードは、ASCII コード体系では 0x41、EBCDIC コード体系では 0xc1。 この文字を表示または印字するには、フォントを選択する必要がある。使用可能なフォント は、使用するコード体系によって異なる。たとえば、文字を A、A または A として印字また は表示できる。これらの形式は、同じ文字を表現する異なる絵文字 絵文字である。 絵文字 関連項目 : 文字コード(character code)および絵文字(glyph) 文字コード(character code) ) 文字コード( 特定の文字を表現する番号。この番号はコード体系によって異なる。たとえば、英大文字の 最初の文字の文字コードは、ASCII コード体系では 0x41 であるが、EBCDIC コード体系で は 0xc1 である。 関連項目 : 文字(character) 文字コード体系(character encoding scheme) ) 文字コード体系( キャラクタ・セットのすべての文字に対して番号(文字コード)を割り当てる規則。コード コード 体系、エンコーディング・メソッド エンコーディングも、文字コード体系 文字コード体系を意味す 体系 エンコーディング・メソッドおよびエンコーディング エンコーディング・メソッド エンコーディング 文字コード体系 る。 文字の分類(character classification) ) 文字の分類( 文字の分類情報によって、各文字コードに関連付けられた文字のタイプに関する詳細が提供 される。たとえば、文字には大文字、小文字、句読点、制御文字がある。 文字列(character string) ) 文字列( 順序付きの文字グループ。 文字列に文字が含まれていない場合もある。この場合、その文字列はヌル文字列 ヌル文字列と呼ばれ ヌル文字列 る。ヌル文字列の文字列長は 0(ゼロ)である。 ローカライゼーション(localization) ) ローカライゼーション( 言語固有または文化固有の情報をソフトウェア・システムに提供するプロセス。アプリケー ションのユーザー・インタフェースの翻訳は、ローカライゼーションの 1 つの例である。 ローカライゼーションとグローバリゼーションは異なるものである。グローバリゼーション とは、ソフトウェアを多様な言語および文化的な環境に適したものにすることである。 用語集 -11 ロケール(locale) ) ロケール( 特定の地域で参照される言語的および文化的な情報の集まり。一般的に、ロケールは NLS データ・ファイルに定義されている言語、地域、キャラクタ・セット、言語処理およびカレ ンダ情報で構成される。 ワイド・キャラクタ(wide character) ) ワイド・キャラクタ( 固定幅の文字形式。固定幅の領域でデータが処理されるので、大量のテキスト処理に適して いる。ワイド・キャラクタは、内部の文字処理をサポートすることを目的としている。 用語集 -12 索引 記号 $ORACLE_HOME/nls/data ディレクトリ,1-3 $ORACLE_HOME/oracore/zoneinfo/timezlrg.dat タイム・ゾーン・ファイル,4-19 $ORACLE_HOME/oracore/zoneinfo/timezone.dat タイム・ゾーン・ファイル,4-19 数字 1 次レベル・ソート,5-6 2 次レベル・ソート,5-6 3 次レベル・ソート,5-7 7 ビット・コード体系,2-9 8 ビット・コード体系,2-9 A ADCS スクリプト Real Application Clusters でのキャラクタ・セット の移行,11-10 ADD_MONTHS SQL 関数,4-15 ADO インタフェースと Unicode,7-43 AL16UTF16 キャラクタ・セット,6-6,A-20 AL24UTFFSS キャラクタ・セット,6-6 AL32UTF8 キャラクタ・セット,6-6,6-7,A-20 ALTER DATABASE CHARACTER SET 文,11-10 ALTER DATABASE NATIONAL CHARACTER SET 文,11-10 ALTER SESSION 文 SET NLS_CURRENCY 句,3-35,3-37 SET NLS_LANGUAGE 句,3-19 SET NLS_NUMERIC_CHARACTERS 句,3-33 SET NLS_TERRITORY 句,3-19 ALTER TABLE MODIFY 文 CHAR から NCHAR への移行,11-12,11-13 analyse_histgrm.sql スクリプト,12-39 analyse_rule.sql スクリプト,12-39 analyse_source.sql スクリプト,12-39 application-locales,8-38 Arial Unicode MS フォント,13-2 ARRAY パラメータ Database Character Set Scanner,12-13 ASCII エンコーディング,2-6 AT LOCAL 句,4-26 AT TIME ZONE 句,4-26 B BFILE データ LOB へのロード,9-14 BLANK_TRIMMING パラメータ,11-4 BLOB 索引の作成,6-23 BOUNDARIES パラメータ Database Character Set Scanner,12-14 C CAPTURE パラメータ Database Character Set Scanner,12-14 CESU-8 準拠,A-20 CHAR 列 NCHAR 列への移行,11-12 CLOB 索引の作成,6-23 CLOB および NCLOB データ OCI でのバインドと定義,7-22 索引 -1 CONVERT SQL 関数,9-6 キャラクタ・セット,A-21 CSALTER スクリプト,11-9,11-10 更新フェーズ,12-45 実行,12-43 チェック・フェーズ,12-43 CSM$COLUMNS 表,12-40 CSM$ERRORS 表,12-41 CSM$TABLES 表,12-40 CSMIG ユーザー,12-9 csminst.sql スクリプト 実行,12-10 CSMV$COLUMNS ビュー,12-46 CSMV$CONSTRAINTS ビュー,12-47 CSMV$ERROR ビュー,12-47 CSMV$INDEXES ビュー,12-48 CSMV$TABLES ビュー,12-48 CURRENT_DATE SQL 関数,4-16 CURRENT_TIMESTAMP SQL 関数,4-16 C 数値書式マスク,3-36 D Database Character Set Scanner,12-15 analyse_histgrm.sql スクリプト,12-39 analyse_rule.sql スクリプト,12-39 analyse_source.sql スクリプト,12-39 ARRAY パラメータ,12-13 BOUNDARIES パラメータ,12-14 CAPTURE パラメータ,12-14 CSM$COLUMNS 表,12-40 CSM$ERRORS 表,12-41 CSM$TABLES 表,12-40 CSMV$COLUMNS ビュー,12-46 CSMV$CONSTRAINTS ビュー,12-47 CSMV$ERROR ビュー,12-47 CSMV$INDEXES ビュー,12-48 CSMV$TABLES ビュー,12-48 EXCLUDE パラメータ,12-14 FEEDBACK パラメータ,12-15 FROMNCHAR パラメータ,12-15 FULL パラメータ,12-16 HELP パラメータ,12-16 LASTRPT パラメータ,12-17,12-18 MAXBLOCKS パラメータ,12-19 PRESERVE パラメータ,12-19 SUPPRESS パラメータ,12-20 索引 -2 TABLE パラメータ,12-21 TOCHAR パラメータ,12-21 USERID パラメータ,12-22 USER パラメータ,12-22 エラー・メッセージ,12-49 オンライン・ヘルプ,12-11 起動,12-10 個別例外レポート,12-35 スキャン・モード,12-8 制限事項,12-42 データベース・スキャンのサマリー・レポート, 12-27 パフォーマンス,12-41 ビュー,12-46 Database Character Set Scanner ユーティリティ,12-7 DATE データ型,4-3 DBMS_LOB PL/SQL パッケージ,9-14 DBMS_LOB.LOADBLOBFROMFILE プロシージャ, 9-14 DBMS_LOB.LOADCLOBFROMFILE プロシージャ, 9-14 DBMS_REDEFINITION.CAN_REDEF_TABLE プロ シージャ,11-13 DBTIMEZONE SQL 関数,4-16 dest_char_set パラメータ,A-21 E ERROR_ON_OVERLAP_TIME セッション・パラ メータ,4-19 EXCLUDE パラメータ Database Character Set Scanner,12-14 EXTRACT (datetime) SQL 関数,4-16 F FEEDBACK パラメータ Database Character Set Scanner,12-15 FROM_TZ SQL 関数,4-16 FROMCHAR パラメータ,12-15 Database Character Set Scanner,12-15 FROMNCHAR パラメータ Database Character Set Scanner,12-15 FULL パラメータ Database Character Set Scanner,12-16 G I GDK アプリケーション構成ファイル,8-15 GDK Localizer オブジェクト,8-19 gdkapp.xml GDK アプリケーション構成ファイル, 8-15 gdkapp.xml アプリケーション構成ファイル,8-36 GDK アプリケーション構成ファイル,8-36 例,8-43 GDK エラー・メッセージ,8-47 GDK の Java API,8-26 GDK の Java 提供パッケージおよびクラス,8-44 GDK のコンポーネント,8-10 GENERIC_BASELETTER 言語ソート,5-13 getString() メソッド,7-33 getStringWithReplacement() メソッド,7-33 Globalization Development Kit,8-2 HTML ページでの ASCII 以外の入出力,8-21 Java API,8-26 Java 提供パッケージおよびクラス,8-44 JSP と Java Servlet での文字列の管理,8-24 Localizer オブジェクト,8-19 Oracle 言語およびキャラクタ・セット検出,8-32 Oracle のバイナリ・ソートと言語ソート,8-31 Oracle の日付、数値および通貨書式,8-30 Oracle の翻訳済ロケール名とタイム・ゾーン名, 8-34 Oracle ロケール情報,8-27 Oracle ロケール・マッピング,8-27 アプリケーション構成ファイル,8-36 エラー・メッセージ,8-47 キャラクタ・セットの変換,8-28 コンポーネント,8-10 サポートされているアプリケーション・ロケールの 定義,8-20 サポートされているロケール・リソース,8-16 静的ファイルでのローカライズされたコンテンツの 管理,8-24 電子メール・プログラム,8-34 フレームワーク,8-12 ロケール検出,8-17 ロケール・ソースの統合,8-16 IANA キャラクタ・セット ISO ロケールとのマッピング,8-23 INSTR SQL 関数,7-11,9-7 INTERVAL DAY TO SECOND データ型,4-12 INTERVAL YEAR TO MONTH データ型,4-12 ISO 8859 キャラクタ・セット,2-7 ISO 規格 日付書式,9-13 ISO 規格の日付書式,3-27,9-13 ISO 週番号,9-13 ISO ロケール IANA キャラクタ・セットとのマッピング,8-23 IW 書式要素,9-14 IY 書式要素,9-14 H J J2EE 用 GDK アプリケーション・フレームワーク, 8-12 Java Unicode データ変換,7-31 Java 文字列 Unicode でのバインドと定義,7-28 JDBC OCI ドライバ Unicode,7-4 JDBC Thin ドライバ SQL CHAR データ・サイズの制限,7-36 Unicode,7-4 変換中のデータ拡張,7-36 JDBC ドライバ 使用フォームの引数,7-30 JDBC のプログラミング Unicode,7-27 L Language and Character Set File Scanner,12-2 LAST_DAY SQL 関数,4-15 LASTRPT パラメータ Database Character Set Scanner,12-17,12-18 LCSSCAN,12-2 エラー・メッセージ,12-6 サポート対象の言語とキャラクタ・セット,12-5, A-24 HELP パラメータ Database Character Set Scanner,12-16 索引 -3 LCSSCAN コマンド BEGIN パラメータ,12-3 END パラメータ,12-3 FILE パラメータ,12-4 HELP パラメータ,12-5 RESULTS パラメータ,12-3 オンライン・ヘルプ,12-5 構文,12-3 例,12-4 LENGTH SQL 関数,9-7 LIKE2 SQL 条件,9-8 LIKE4 SQL 条件,9-8 LIKEC SQL 条件,9-8 lmsgen ユーティリティ,10-9 LOB 外部 BFILE データのロード,9-14 複数言語によるドキュメントの格納,6-21 LOB への外部 BFILE データのロード,9-14 locale-charset-map,8-37 locale-determine-rule,8-39 LocaleMapper クラス,8-34 locale-parameter-name,8-40 LOCALTIMESTAMP SQL 関数,4-16 lxegen ユーティリティ,13-20 M MAXBLOCKS パラメータ Database Character Set Scanner,12-19 message-bundles,8-41 MONTHS_BETWEEN SQL 関数,4-15 N N SQL 関数,7-10 NCHAR 抽象データ型の作成,2-19 NCHAR データ型,7-5 移行,11-11 NCHAR 列 バージョン 8 から Oracle9i 以上への移行,11-11 NCHR SQL 関数,7-12 NCLOB データ型,7-7 NEW_TIME SQL 関数,4-16 NEXT_DAY SQL 関数,4-16 NLB データ 転送可能,13-46 索引 -4 NLB ファイル,13-2,13-7 生成とインストール,13-44 NLS_CALENDAR パラメータ,3-29 NLS_CHARSET_DECL_LEN SQL 関数,9-9 NLS_CHARSET_ID SQL 関数,9-9 NLS_CHARSET_NAME SQL 関数,9-9 NLS_COMP パラメータ,3-44,9-12 NLS_CREDIT パラメータ,3-41 NLS_CURRENCY パラメータ,3-35 NLS_DATABASE_PARAMETERS データ・ディクショ ナリ・ビュー,3-12 NLS_DATE_FORMAT 初期化パラメータ,4-18 NLS_DATE_FORMAT パラメータ,3-21 NLS_DATE_LANGUAGE パラメータ,3-22 NLS_DEBIT パラメータ,3-42 NLS_DUAL_CURRENCY パラメータ,3-38 NLS_INITCAP SQL 関数,5-12,9-2 NLS_INSTANCE_PARAMETERS データ・ディクショ ナリ・ビュー,3-12 NLS_ISO_CURRENCY パラメータ,3-36 NLS_LANGUAGE パラメータ,3-13 NLS_LANG パラメータ,3-5 OCI クライアント・アプリケーション,7-19 UNIX クライアント,3-11 Windows クライアント,3-11 クライアントの設定,3-11 指定,3-7 例,3-7 ロケールの選択,3-5 NLS_LENGTH_SEMANTICS パラメータ,2-12 NLS_LIST_SEPARATOR パラメータ,3-45 NLS_LOWER SQL 関数,5-12,5-13,9-2 NLS_MONETARY_CHARACTERS パラメータ,3-41 NLS_NCHAR_CONV_EXCP パラメータ,3-45 NLS_NUMERIC_CHARACTERS パラメータ,3-32 NLS_SESSION_PARAMETERS データ・ディクショナ リ・ビュー,3-12 NLS_SORT パラメータ,3-43,5-22 NLS_TERRITORY パラメータ,3-16 NLS_TIMESTAMP_FORMAT 初期化パラメータ,4-18 NLS_TIMESTAMP_FORMAT パラメータ パラメータ NLS_TIMESTAMP_FORMAT,3-25 NLS_TIMESTAMP_TZ_FORMAT 初期化パラメータ, 4-18 NLS_UPPER SQL 関数,5-12,5-13,9-2 NLSRTL,1-2 NLSSORT SQL 関数,9-2,9-10 構文,9-11 NLS カレンダ・ユーティリティ,13-20 NLS パラメータ SQL 関数で受け入れられない,9-5 SQL 関数での指定,9-3 SQL 関数でのデフォルト値,9-3 設定,3-2 リスト,3-3 NLS ランタイム・ライブラリ,1-2 NLT ファイル,13-2 NUMTODSINTERVAL SQL 関数,4-16 NUMTOYMINTERVAL SQL 関数,4-16 NVARCHAR2 データ型,7-6 NVARCHAR データ型 Pro*C/C++,7-25 O OCI OCI での CLOB および NCLOB データのバインド と定義,7-22 SQL CHAR データ型,7-19 SQL NCHAR データ型のバインドと定義,7-21 キャラクタ・セットの設定,10-2 OCI_ATTR_CHARSET_FORM 属性,7-16 OCI_ATTR_MAXDATA_SIZE 属性,7-18 OCI_UTF16ID キャラクタ・セット ID,7-14 OCIBind() 関数,7-19 OCICharSetConversionIsReplacementUsed(),10-8 OCICharSetConvert(),10-8 OCICharsetToUnicode(),10-8 OCIDefine() 関数,7-19 OCIEnvNlsCreate(),7-14,10-2 OCILobRead() 関数,7-22 OCILobWrite() 関数,7-22 OCIMessageClose(),10-9 OCIMessageGet(),10-9 OCIMessageOpen(),10-9 OCIMultiByteInSizeToWideChar(),10-5 OCIMultiByteStrCaseConversion(),10-6 OCIMultiByteStrcat(),10-6 OCIMultiByteStrcmp(),10-6 OCIMultiByteStrcpy(),10-6 OCIMultiByteStrlen(),10-6 OCIMultiByteStrncat(),10-6 OCIMultiByteStrncmp(),10-6 OCIMultiByteStrncpy(),10-6 OCIMultiByteStrnDisplayLength(),10-6 OCIMultiByteToWideChar(),10-5 OCINlsCharSetIdToName(),10-3 OCINlsCharSetNameTold(),10-3 OCINlsEnvironmentVariableGet(),10-3 OCINlsGetInfo(),10-3 OCINlsNameMap(),10-4 OCINlsNumericInfoGet(),10-3 OCIUnicodeToCharset(),10-8 OCIWideCharDisplayLength(),10-5 OCIWideCharInSizeToMultiByte(),10-5 OCIWideCharIsAlnum(),10-7 OCIWideCharIsAlpha(),10-7 OCIWideCharIsCntrl(),10-7 OCIWideCharIsDigit(),10-7 OCIWideCharIsGraph(),10-7 OCIWideCharIsLower(),10-7 OCIWideCharIsPrint(),10-7 OCIWideCharIsPunct(),10-7 OCIWideCharIsSingleByte(),10-7 OCIWideCharIsSpace(),10-7 OCIWideCharIsUpper(),10-7,10-8 OCIWideCharIsXdigit(),10-7 OCIWideCharMultibyteLength(),10-5 OCIWideCharStrCaseConversion(),10-5 OCIWideCharStrcat(),10-5 OCIWideCharStrchr(),10-5 OCIWideCharStrcmp(),10-5 OCIWideCharStrcpy(),10-5 OCIWideCharStrlen(),10-5 OCIWideCharStrncat(),10-5 OCIWideCharStrncmp(),10-5 OCIWideCharStrncpy(),10-5 OCIWideCharStrrchr(),10-5 OCIWideCharToLower(),10-5 OCIWideCharToMultiByte(),10-5 OCIWideCharToUpper(),10-5 OCI クライアント・アプリケーション Unicode キャラクタ・セットを使用,7-19 OCI での CLOB および NCLOB データのバインドと 定義,7-22 OCI での SQL CHAR データ型のバインドと定義,7-19 OCI での SQL NCHAR データ型のバインドと定義, 7-21 OCI と Unicode,7-3 索引 -5 OCI のキャラクタ・セットの変換,7-16 データ消失,7-16 パフォーマンス,7-16 OCI のデータ変換 データの拡張,7-18 OCI を使用した文字列操作,10-4 ODBC Unicode アプリケーション,7-42 OLE DB の Unicode データ型,7-43 ORA_NLS10 環境変数,1-3 Oracle Call Interface と Unicode,7-3 Oracle Data Provide for .NET と Unicode,7-4 Oracle Locale Builder 「Existing Definitions」ダイアログ・ボックス,13-6 「Open File」ダイアログ・ボックス,13-9 「Preview NLT」画面,13-8 「Session Log」ダイアログ・ボックス,13-7 カレンダ書式の選択,13-15 起動,13-4 コード・チャートの表示,13-21 通貨書式の選択,13-18 日付および時刻書式の選択,13-16 フォント,13-2,13-3 ロケール・オブジェクト名に関する制限事項, 13-11 Oracle ODBC ドライバと Unicode,7-3 Oracle OLE DB ドライバと Unicode,7-3 Oracle Pro*C/C++ と Unicode,7-3 oracle.i18n.lcsd パッケージ,8-45 oracle.i18n.net パッケージ,8-45 oracle.i18n.Servlet パッケージ,8-45 oracle.i18n.text パッケージ,8-46 oracle.i18n.util パッケージ,8-46 oracle.sql.CHAR クラス getString() メソッド,7-33 getStringWithReplacement() メソッド,7-33 toString() メソッド,7-33 キャラクタ・セットの変換,7-33 Oracle 言語およびキャラクタ・セット検出 Java クラス,8-32 ORDER BY 句,9-12 P page-charset,8-38 PL/SQL および SQL と Unicode,7-4 PRESERVE パラメータ Database Character Set Scanner,12-19 索引 -6 Private Use Area,13-27 Pro*C/C++ NVARCHAR データ型,7-25 UVARCHAR データ型,7-26 VARCHAR データ型,7-25 データ変換,7-24 R Real Application Clusters データベース・キャラクタ・セットの移行,11-10 Real Application Clusters でのキャラクタ・セットの 移行,11-10 REGEXP SQL 関数,5-24 ROUND (date) SQL 関数,4-16 RPAD SQL 関数,7-11 S scan.err ファイル,12-26 scan.out ファイル,12-23,12-25,12-26 scan.txt ファイル,12-26 SESSIONTIMEZONE SQL 関数,4-16 setFormOfUse() メソッド,7-30 source_char_set パラメータ,A-21 SQL CHAR データ型,2-14 OCI,7-19 SQL NCHAR データ型 OCI でのバインドと定義,7-21 SQL 関数 ADD_MONTHS,4-15 CONVERT,9-6 CURRENT_DATE,4-16 CURRENT_TIMESTAMP,4-16 DBTIMEZONE,4-16 EXTRACT (datetime),4-16 FROM_TZ,4-16 INSTR,7-11,9-7 LAST_DAY,4-15 LENGTH,9-7 LOCALTIMESTAMP,4-16 MONTHS_BETWEEN,4-15 N,7-10 NCHR,7-12 NEW_TIME,4-16 NEXT_DAY,4-16 NLS_CHARSET_DECL_LEN,9-9 NLS_CHARSET_ID,9-9 NLS_CHARSET_NAME,9-9 NLS_INITCAP,5-12,9-2 NLS_LOWER,5-12,5-13,9-2 NLS_UPPER,5-12,5-13,9-2 NLSSORT,9-2,9-10 NLS パラメータの指定,9-3 NLS パラメータのデフォルト値,9-3 NUMTODSINTERVAL,4-16 NUMTOYMINTERVAL,4-16 ROUND (date),4-16 RPAD,7-11 SESSIONTIMEZONE,4-16 SUBSTR,9-7 SUBSTR2,9-7 SUBSTR4,9-7 SUBSTRB,9-7 SUBSTRC,9-7 SYS_EXTRACT_UTC,4-16 SYSDATE,4-17 SYSTIMESTAMP,4-17 TO_CHAR,9-2 TO_CHAR (datetime),4-17 TO_DATE,7-10,9-2 TO_DSINTERVAL,4-17 TO_NCHAR,7-9 TO_NUMBER,9-2 TO_TIMESTAMP,4-17 TO_TIMESTAMP_TZ,4-17 TO_YMINTERVAL,4-17 TRUNC (date),4-16 TZ_OFFSET,4-17 UNISTR,7-12 受け入れられない NLS パラメータ,9-5 データ型変換,7-9 SQL 条件 LIKE2,9-8 LIKE4,9-8 LIKEC,9-8 SQL 文 LIKE 条件,9-8 SQL 文の LIKE 条件,9-8 SUBSTR SQL 関数,9-7 SUBSTR,9-7 SUBSTR2,9-7 SUBSTR4,9-7 SUBSTRB,9-7 SUBSTRC,9-7 SUBSTR4 SQL 関数,9-7 SUBSTRB SQL 関数,9-7 SUBSTRC SQL 関数,9-7 SUPPRESS パラメータ Database Character Set Scanner,12-20 SYS_EXTRACT_UTC SQL 関数,4-16 SYSDATE SQL 関数,4-17 セッションのタイム・ゾーンの影響,4-25 sys.sys_tzuv2_temptab 表,4-23 SYSTIMESTAMP SQL 関数,4-17 T TABLE パラメータ Database Character Set Scanner,12-21 TIMESTAMP WITH LOCAL TIME ZONE データ型, 4-6 使用する状況,4-11 TIMESTAMP WITH TIME ZONE データ型,4-5 使用する状況,4-11 TIMESTAMP データ型,4-4 使用する状況,4-11 選択,4-11 timezlrg.dat ファイル,13-19 timezone.dat ファイル,13-19 TO_CHAR (datetime) SQL 関数,4-17 TO_CHAR SQL 関数,9-2 グループ・セパレータ,3-32 書式マスク,9-13 デフォルトの日付書式,3-21,4-18 日付の言語,3-22 曜日と月の表記,3-23 TO_DATE SQL 関数,7-10,9-2 書式マスク,9-13 デフォルトの日付書式,3-21,4-18 日付の言語,3-22 曜日と月の表記,3-23 TO_DSINTERVAL SQL 関数,4-17 TO_NCHAR SQL 関数,7-9 TO_NUMBER SQL 関数,9-2 書式マスク,9-13 TO_TIMESTAMP SQL 関数,4-17 TO_TIMESTAMP_TZ SQL 関数,4-17 TO_YMINTERVAL SQL 関数,4-17 索引 -7 TOCHAR パラメータ Database Character Set Scanner,12-21 toString() メソッド,7-33 TRUNC (date) SQL 関数,4-16 TZ_OFFSET SQL 関数,4-17 TZABBREV,4-20 TZNAME,4-20 U UCS-2 エンコーディング,6-4 Unicode,6-2 Java でのデータ変換,7-31 Java 文字列のバインドと定義,7-28 Java を使用した XML ストリームの解析,7-46 Java を使用した XML ファイルの作成,7-44 Java を使用した XML ファイルの読取り,7-45 JDBC OCI ドライバ,7-4 JDBC Thin ドライバ,7-4 JDBC のプログラミング,7-27 OCI クライアントとデータベース・サーバーの間の キャラクタ・セット変換,7-16 ODBC と OLE DB のプログラミング,7-39 Oracle Call Interface,7-3 Oracle Data Provide for .NET,7-4 Oracle ODBC ドライバ,7-3 Oracle OLE DB ドライバ,7-3 Oracle Pro*C/C++,7-3 Oracle でのサポート,6-6 PL/SQL と SQL,7-4 Private Use Area,13-27 UCS-2 エンコーディング,6-4 UTF-16 エンコーディング,6-4 UTF-16 文字のコード範囲,B-2 UTF-8 エンコーディング,6-3 UTF-8 文字のコード範囲,B-2 XML プログラミング,7-44 サーバー側 JDBC Thin ドライバ,7-4 サーバー側 JDBC 内部ドライバ,7-4 プログラミング,7-2 文字コードの割当て,B-2 文字列リテラル,7-12 Unicode エンコーディング,6-3 Unicode データ型,6-9 Unicode データベースとの併用(事例) ,6-17 各国語キャラクタ・セットの選択,6-14 索引 -8 使用する状況,6-12 事例,6-16 Unicode データ型を使用したデータベースの作成,6-9 Unicode データベース,6-7 Unicode データ型との併用(事例) ,6-17 キャラクタ・セットの選択,6-13 使用する状況,6-11 事例,6-15 Unicode データベースと Unicode データ型の間の 選択,6-10 Unicode データベースの作成,6-8 Unicode フォント,13-2 Unicode モード,7-14 UNISTR SQL 関数,7-12 url-rewrite-rule,8-42 US7ASCII スーパーセット,A-22 USERID パラメータ Database Character Set Scanner,12-22 USER パラメータ Database Character Set Scanner,12-22 UTC,4-5,4-6 UTF-16 エンコーディング,6-4,B-3 UTF-8 エンコーディング,6-3,B-4 UTF8 キャラクタ・セット,6-8,A-20 UTFE キャラクタ・セット,6-6,6-8,A-20 UTL_FILE パッケージ、NCHAR とともに使用,7-13 UTL_I18N PL/SQL パッケージ,8-47 UTL_LMS PL/SQL パッケージ,8-47 utltzuv2.sql スクリプト,4-23 UVARCHAR データ型 Pro*C/C++,7-26 V V$NLS_PARAMETERS 動的パフォーマンス・ビュー, 3-12 V$NLS_VALID_VALUES 動的パフォーマンス・ ビュー,3-12 VARCHAR データ型 Pro*C/C++,7-25 W WHERE 句 文字列の比較,9-11 X お XML Java を使用して Unicode で解析,7-46 Java を使用して Unicode で作成,7-44 Java を使用して Unicode で読取り,7-45 XML プログラミング Unicode,7-44 大 / 小文字を区別しない言語ソート,5-13 オペレーティング・システム アプリケーションとのキャラクタ・セットの 互換性,2-16 オペレーティング・システムのローカルのタイム・ ゾーン OS_TZ,4-25 あ か アクセント,5-15 アクセントを区別しない言語ソート,5-13 暗黙的なデータ型変換,7-8 拡張文字,5-12 文字 拡張,5-9 各国語キャラクタ・セット,2-18,6-9,7-6 Oracle9i まで,6-9 可変幅マルチバイト・コード体系,2-10 カレンダ カスタマイズ,13-20 サポート対象,A-30 パラメータ,3-26 カレンダ・ユーティリティ,13-20 環境変数 ORA_SDTZ,4-19,4-25 ORA_TZFILE,4-19 環境変数 ORA_SDTZ,4-19,4-25 環境変数 ORA_TZFILE,4-19 完全なスーパーセット,6-3 い 移行 CHAR 列から NCHAR 列へ,11-12 NCHAR データ型へ,11-11 キャラクタ・セット,11-2 バージョン 8 から Oracle9i 以上への NCHAR 列の 移行,11-11 インターネット・アプリケーション 多言語,8-3,8-6 単一言語,8-3,8-4 ロケールの判別,8-8 インターネット・アプリケーションのロケール 判別,8-8 え エラー・メッセージ 言語,A-5 翻訳,A-5 エンコーディング 記号,2-4 句読点,2-4 数字,2-4 制御文字,2-4 表意的記述法,2-4 表音的記述法,2-4 き 期間データ型,4-2,4-12 値の挿入,4-13 記号、エンコーディング,2-4 逆 2 次ソート,5-11 キャラクタ・セット AL16UTF16,6-6 AL24UTFFSS,6-6 AL32UTF8,6-6 Globalization Development Kit を使用した検出, 8-32 ISO 8859 シリーズ,2-7 OCI を使用した変換,10-8 Unicode データベース用キャラクタ・セットの 選択,6-13 UTFE,6-6 アジア地域,A-9 索引 -9 移行,11-2 移行およびデータ・ディクショナリ,12-38 エンコーディング,2-2 カスタマイズ,13-25 各国語,2-18,6-9,7-6 各国語キャラクタ・セットの選択,6-14 サポート対象,A-8 様々な文字レパートリのサポート,2-5 スーパーセットとサブセット,A-21 選択,11-2 中東地域,A-18 データ消失,11-4 データベース作成後の変更,2-20 名前を表すために使用するキャラクタ・セットに 関する制限事項,2-17 ネーミング,2-10 変換,2-16,2-21,9-6,13-27 変換中のデータ消失,2-16 ユニバーサル,A-20 ヨーロッパ地域,A-11 キャラクタ・セット移行時のデータの拡張,11-2 キャラクタ・セット間の文字データ変換,9-6 キャラクタ・セット定義 カスタマイズ,13-29 ファイルのネーミング,13-28 ファイルの編集に関するガイドライン,13-28 キャラクタ・セットの移行 CSALTER スクリプト,11-9 移行後のタスク,11-16 文字データのスキャン,11-8 文字データ変換の問題の識別,11-8 キャラクタ・セットの混在 データ消失の原因,11-6 キャラクタ・セットの選択,11-2 キャラクタ・セットの変換 OCI クライアントとデータベース・サーバーの間, 7-16 パラメータ,3-45 キャラクタ・セット変換中のデータ消失,2-16 キャラクタ・セマンティクス,2-11,3-46 協定世界時,4-5,4-6 索引 -10 く 空白埋込み エクスポート時,11-4 句読点、エンコーディング,2-4 クライアントのオペレーティング・システム アプリケーションとのキャラクタ・セットの 互換性,2-16 グリニッジ標準時,4-5,4-6 グローバリゼーション・サポート アーキテクチャ,1-2 グローバリゼーションの機能,1-6 け ケース,5-2 言語 Globalization Development Kit を使用した検出, 8-32 エラー・メッセージ,A-5 言語サポート,1-6 言語ソート BINARY,5-18 BINARY_AI、言語ソート BINARY_CI,5-18 GENERIC_BASELETTER,5-13 アクセント区別なし,5-13 大 / 小文字区別なし,5-13 カスタマイズ,13-35 発音区別記号付きの文字,13-39,13-42 制御,9-12 デフォルトのリスト,A-2 パラメータ,3-42 レベル,5-6 言語ソートの定義 サポート対象,A-27 言語定義と地域定義のオーバーライド,3-8 言語とキャラクタ・セット LCSSCAN のサポート対象,A-24 言語とキャラクタ・セットの検出 Globalization Development Kit,8-32 言語の定義 オーバーライド,3-8 カスタマイズ,13-10 言語の略称,A-2 言語またはキャラクタ・セットの推測,12-2 検出 サポート対象の言語とキャラクタ・セット,A-24 こ 合成文字,5-9 コード体系 7 ビット,2-9 8 ビット,2-9 可変幅,2-10 固定幅,2-10 シフト・センシティブ可変幅,2-10 シフト・センシティブ可変幅マルチバイト,2-10 シングルバイト,2-9 マルチバイト,2-10 コード・チャート 表示と印刷,13-21 コード・ポイント(code point),2-2 互換性 クライアントのオペレーティング・システムとアプ リケーションのキャラクタ・セットの互換性, 2-16 固定幅マルチバイト・コード体系,2-10 個別例外レポート,12-35 さ サーバー側 JDBC Thin ドライバ Unicode,7-4 サーバー側 JDBC 内部ドライバ Unicode,7-4 索引 BLOB として格納されたドキュメントに対する索引 の作成,6-23 CLOB として格納されたドキュメント用の作成, 6-23 多言語ドキュメントの検索用に作成,6-22 パーティション,9-12 サポートしている地域,A-6 サポート対象のデータ型,2-18 サロゲート・ペア,6-3 し 時間および日付を指定するパラメータ,3-20 シフト・センシティブ可変幅マルチバイト・コード 体系,2-10 状況依存文字,5-10 照合 カスタマイズ,13-35 初期化パラメータ NLS_DATE_FORMAT,4-18 NLS_TIMESTAMP_FORMAT,4-18 NLS_TIMESTAMP_TZ_FORMAT,4-18 書式 時刻,3-24 数値,3-31 通貨,3-34 日付,3-21,4-18 書式マスク,3-32,9-13 書式要素,9-14 C,9-14 D,9-14 G,9-14 IW,9-14 IY,9-14 L,9-14 RM,9-13 RN,9-14 月,3-24 曜日,3-24 シングルバイト・コード体系,2-9 す 数字、エンコーディング,2-4 数値書式,3-31 SQL マスク,9-14 数値パラメータ,3-31 スーパーセットとサブセット,A-21 スーパーセット、完全な,6-3 スキャン・モード Database Character Set Scanner,12-8 全データベース・スキャン,12-8 単一表のスキャン,12-8 ユーザー表のスキャン,12-8 索引 -11 せ 正規表現 照合要素デリミタ,5-25 多言語環境,5-24 同値化クラス,5-26 文字クラス,5-25 文字範囲,5-25 例,5-26 制御文字、エンコーディング,2-4 制限事項 エクスポート時の空白埋込み,11-4 データの切捨て,11-3 パスワード,11-4 ユーザー名,11-4 制限付き多言語サポート,2-23 セッションのタイム・ゾーン,4-25 セッション・パラメータ ERROR_ON_OVERLAP,4-19 そ ソート 逆 2 次,5-11 非デフォルトの言語ソートの指定,3-43,3-44 た タイ語とラオ語の文字の再配列,5-11 タイムスタンプ書式,3-25 タイム・ゾーン SYSDATE SQL 関数への影響,4-25 カスタマイズ,13-19 セッション,4-25 定義のアップグレード,4-22 データベース,4-24 変換,4-27 タイム・ゾーン環境変数,4-19 タイム・ゾーン・データ ソース,4-20 タイム・ゾーン・データのカスタマイズ,13-19 タイム・ゾーンの変換,4-27 タイム・ゾーン・パラメータ,3-25 タイム・ゾーン・ファイル 選択,4-19 デフォルト,4-19 タイム・ゾーン名,4-20 索引 -12 タイム・ゾーン略称,4-20 多言語インターネット・アプリケーション,8-6 多言語サポート 制限付き,2-23 無制限,2-24 多言語ソート サポート対象,A-29 例,5-20 多言語データ 列の長さの指定,6-18 多言語ドキュメントの検索,6-22 索引の作成,6-22 単一言語インターネット・アプリケーション,8-4 単一言語ソート サポート対象,A-27 例,5-19 短縮文字,5-9,5-12 ち 地域 依存性,3-9 地域サポート,1-7,A-6 地域の定義,3-16 オーバーライド,3-8 カスタマイズ,13-14 地域のバリアント,3-9 置換文字 CONVERT SQL 関数,9-6 抽象データ型 NCHAR として作成,2-19 チルド,7-37 つ 通貨 書式,3-34 通貨パラメータ,3-34 月 書式要素,3-24 名前の言語,3-23 て データ型 DATE,4-3 INTERVAL DAY TO SECOND,4-12 INTERVAL YEAR TO MONTH,4-12 TIMESTAMP,4-4 TIMESTAMP WITH LOCAL TIME ZONE,4-6 TIMESTAMP WITH TIME ZONE,4-5 期間,4-2,4-12 期間データ型への値の挿入,4-13 サポート対象,2-18 抽象,2-18 日時,4-2 日時データ型への値の挿入,4-7 データ型変換 SQL 関数,7-9 暗黙的,7-8 データ消失と例外,7-7 データ型変換中のデータ消失 例外,7-7 データ消失 OCI の Unicode キャラクタ・セット変換時,7-16 キャラクタ・セット移行時,11-4 キャラクタ・セットの混在,11-6 データの非一貫性が原因,11-6 データ消失の原因となるデータの非一貫性,11-6 データ・ディクショナリ キャラクタ・セットの変更,12-38 変換可能データまたは不可逆データ,12-38 データ・ディクショナリ・ビュー NLS_DATABASE_PARAMETERS,3-12 NLS_INSTANCE_PARAMETERS,3-12 NLS_SESSION_PARAMETER,3-12 データの拡張 データ変換時,7-18 データの切捨て,11-2 制限事項,11-3 データベース・キャラクタ・セット クライアントのオペレーティング・システムとアプ リケーションとの互換性,2-16 選択,2-14 パフォーマンス,2-17 文字データ変換,11-8 データベース・スキーマ 複数言語用の設計,6-18 データベース・スキャンのサマリー・レポート,12-27 データベースのタイム・ゾーン,4-24 データベースのタイム・ゾーン DB_TZ,4-25 データ変換 OCI ドライバ,7-31 ODBC および OLE DB ドライバ,7-39 Pro*C/C++,7-24 Thin ドライバ,7-32 Unicode の Java 文字列,7-31 転送可能な NLB データ,13-46 と 動的パフォーマンス・ビュー V$NLS_PARAMETERS,3-12 V$NLS_VALID_VALUES,3-12 特殊組合せ文字,5-9,5-12 特殊な大文字,5-12 特殊な小文字,5-12 特殊文字,5-9,5-12 な 長さセマンティクス,2-11,3-46 夏時間 Oracle でのサポート,4-27 夏時間セッション・パラメータ,4-19 波形のダッシュ,7-37 に 日時書式パラメータ,4-18 日時データ型,4-2 値の挿入,4-7 は バージョン 8 の NCHAR 列 Oracle9i 以上への移行,11-11 パーティション 索引,9-12 表,9-12 廃止になったロケール・データ,A-41 バイト・セマンティクス,2-11,3-46 バイナリ・ソート,5-3 大 / 小文字およびアクセントを区別しない,5-17 例,5-19 発音区別記号,5-2 索引 -13 パフォーマンス OCI の Unicode キャラクタ・セット変換時,7-16 データベース・キャラクタ・セットの選択,2-17 パラメータ BLANK_TRIMMING,11-4 NLS_CALENDAR,3-29 NLS_COMP,3-44 NLS_CREDIT,3-41 NLS_CURRENCY,3-35 NLS_DATE_FORMAT,3-21 NLS_DATE_LANGUAGE,3-22 NLS_DEBIT,3-42 NLS_DUAL_CURRENCY,3-38 NLS_ISO_CURRENCY,3-36 NLS_LANG,3-5 NLS_LANGUAGE,3-13 NLS_LIST_SEPARATOR,3-45 NLS_MONETARY_CHARACTERS,3-41 NLS_NCHAR_CONV_EXCP,3-45 NLS_NUMERIC_CHARACTERS,3-32 NLS_SORT,3-43 NLS_TERRITORY,3-16 カレンダ,3-26 キャラクタ・セットの変換,3-45 言語ソート,3-42 数値,3-31 設定,3-2 設定方法,3-3 タイム・ゾーン,3-25 通貨,3-34 日付と時間,3-20 ひ 日付 ISO 規格,3-27,9-13 NLS_DATE_LANGUAGE パラメータ,3-23 日付および時間を指定するパラメータ,3-20 日付書式,3-20,3-21,9-13 パーティション・バウンド式,3-22 表 パーティション,9-12 表意的記述法、エンコーディング,2-4 表音的記述法、エンコーディング,2-4 表音文字セット,2-4 索引 -14 標準的な同値化,5-5,5-10 表のオンライン再定義 CHAR から NCHAR への移行,11-12,11-13 ふ フォント Unicode,13-2 UNIX 用 Unicode,13-3 Windows 用 Unicode,13-2 不可逆データ データ・ディクショナリ,12-38 複数言語 LOB へのドキュメントの格納,6-21 データの格納,6-19 データベース・スキーマの設計,6-18 へ ベース文字,5-6,5-8 変換 キャラクタ・セット ID 番号とキャラクタ・ セット名,9-9 変換可能なデータ データ・ディクショナリ,12-38 変換中のデータ拡張 JDBC Thin ドライバ,7-36 ほ 補助文字,5-5,6-3 言語ソートのサポート,A-30 ま マルチバイト・コード体系,2-10 可変幅,2-10 固定幅,2-10 シフト・センシティブ可変幅,2-10 マルチレクサー 作成,6-22 む 無視可能文字,5-9 無制限多言語サポート,2-24 も り 文字 状況依存,5-10 すべての Oracle データベース・キャラクタ・セッ トで使用可能,2-5 短縮,5-9 ユーザー定義,13-25 文字データ CONVERT SQL 関数を使用した変換,9-6 文字データ・スキャニング キャラクタ・セットの移行前,11-8 文字データの変換 CONVERT SQL 関数,9-6 文字データ変換 データベース・キャラクタ・セット,11-8 文字の再配列,5-11 文字列 検索,5-23 文字列型の変換 エラー・レポート,3-45 文字列の検索,5-23 文字列の比較 WHERE 句,9-11 文字列リテラル Unicode,7-12 文字レパートリ,2-3 リスト・パラメータ,3-31 略称 言語,A-2 ろ ロケール,3-5 ロケール検出 Globalization Development Kit,8-17 ロケール情報 Oracle と他の規格とのマッピング,10-4 ロケールの依存性,3-9 ロケールのバリアント,3-9 ゆ ユーザー定義文字,13-25 キャラクタ・セット間でのクロス・リファレンス, 13-28 キャラクタ・セット定義への追加,13-33 ユーロ Oracle でのサポート,3-40 よ 曜日 書式要素,3-24 名前の言語,3-23 索引 -15 索引 -16