7 グローバル環境での作業

グローバリゼーション・サポートにより、多言語アプリケーションを世界のどこからでも同時に実行できます。アプリケーションにより、ユーザー・インタフェースの内容をレンダリングし、各国語およびユーザーのロケール・プリファレンスでデータを処理できます。

内容は次のとおりです。

7.1 グローバリゼーション・サポート機能について

グローバリゼーション・サポートにより、世界のどこからでも同時に実行できる多言語アプリケーションを開発できるようになります。アプリケーションにより、ユーザー・インタフェースの内容をレンダリングし、各国語およびユーザーのロケール・プリファレンスでデータを処理できます。

注意:

以前は、グローバリゼーション・サポートを各国語サポート(NLS)と呼んでいましたが、実際にはNLSはグローバリゼーション・サポートのサブセットです。NLSは、各国の言語を選択し、特定のキャラクタ・セットを使用してデータを格納する機能です。NLSは、NLSパラメータで実装します。

内容は次のとおりです。

関連項目:

グローバリゼーション・サポート機能の詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

7.1.1 言語サポートについて

Oracle Databaseでは、データの格納、処理および取出しをネイティブ言語で行うことができます。データベースには、Oracleがサポートするキャラクタ・セットでエンコードされたスクリプトに記述されているすべての言語を格納できます。Unicodeデータベースとデータ型を使用することで、Oracle Databaseは、ほとんどの現代言語をサポートしています。

各国語のサブセットに対しては、追加サポートが用意されています。たとえば、データベースでは、翻訳された月の名前を使用して日付を表示し、文化的な慣習に従ってテキスト・データをソートできます。

このマニュアルでは、言語サポートという用語は、特定の言語のテキストを格納する機能ではなく、追加の言語依存機能を指します。たとえば、言語サポートには、特定のロケールおよび文化的慣習に従った日付の表示やテキストのソートが含まれます。また、サポートされる言語の一部には、Oracle Databaseによりデータベース・ユーティリティ用に翻訳されたサーバー・メッセージおよび翻訳されたユーザー・インタフェースが提供されます。

関連項目:

7.1.2 地域サポートについて

デフォルトのローカル時刻書式、日付書式、数値および通貨に関する規則はローカル地域設定によって異なります。

Oracle Databaseでは、地域に固有な文化的慣習をサポートしています。デフォルトのローカル時刻書式、日付書式、数値および通貨に関する規則はローカル地域設定によって異なります。異なるNLSパラメータを設定することにより、データベース・セッションにおいて異なる文化的設定を使用できます。たとえば、地域がAMERICAの場合であっても、指定したデータベース・セッションに対する基本通貨としてユーロ(EUR)を設定し、補助通貨として日本円(JPY)を設定できます。

関連項目:

7.1.3 日付および時刻書式について

国ごとに、時、日、月および年を表示する規則があります。

たとえば、この表は、5か国の日付および時刻のローカル書式とその例を示しています。

日付書式 時刻書式

中国

yyyy-mm-dd

2005-02-28

hh24:mi:ss

13:50:23

エストニア

dd.mm.yyyy

28.02.2005

hh24:mi:ss

13:50:23

ドイツ

dd.mm.rr

28.02.05

hh24:mi:ss

13:50:23

英国

dd/mm/yyyy

28/02/2005

hh24:mi:ss

13:50:23

米国

mm/dd/yyyy

02/28/2005

hh:mi:ssxff am

1:50:23.555 PM

7.1.4 カレンダ書式について

国ごとに、異なるカレンダを使用します。

Oracle Databaseは、各地域のカレンダ情報を格納しています。

  • 週の最初の曜日

    ある文化では日曜日ですが、別の文化では月曜日です。 NLS_TERRITORYパラメータで設定します。

  • 年の最初の暦週

    一部の国では、週番号を使用してスケジューリング、計画および会計処理を行います。ISO規格では、暦年の週番号とは異なる週番号を使用できます。たとえば、2005年1月1日は、2004年のISOの週番号53となります。ISOの週は月曜日に始まり、日曜日に終わります。ISO規格をサポートするために、OracleにはIW日付書式要素が用意されています。これによりISOの週番号が戻されます。年の最初の暦週はNLS_TERRITORYパラメータで設定します。

  • 1年の日数および月数

    Oracle Databaseでは、デフォルトのグレゴリオ暦の他に、次の6つの暦法をサポートしています。これらの暦法は次のとおりです。

    • Japanese Imperial(日本の元号暦)

      グレゴリオ暦と同じ月数と日数ですが、年は元号ごとに始まります。

    • ROC Official(台湾暦)

      グレゴリオ暦と同じ月数と日数ですが、年は台湾の建国年から始まります。

    • Persian(ペルシャ暦)

      最初の6か月の日数がそれぞれ31日、次の5か月はそれぞれ30日、最後の月は29日または30日(うるう年)です。

    • Thai Buddha(タイ仏教暦): 仏教のカレンダを使用します。

    • Arabic Hijrah(イスラム歴): 月数が12で、日数が354または355です。

    • English Hijrah(英語版イスラム歴): 月数が12で、日数が354または355です。

    暦法は、NLS_CALENDARパラメータで指定します。

  • 紀元の年

    イスラム暦は、ヒジュラ紀元の年から始まります。日本の元号暦は天皇が即位した最初の年から始まります(たとえば、1998年は平成10年となります)。

7.1.5 数値および通貨の書式について

数値と通貨の規則は国によって異なります。

この表は、5か国の数値および通貨のローカル書式とその例を示しています。

数値書式 通貨書式

中国

1,234,567.89

©1,234.56

エストニア

1 234 567,89

1 234,56 kr

ドイツ

1.234.567,89

1.234,56€

英国

1,234,567.89

£1,234.56

米国

1,234,567.89

$1,234.56

7.1.6 言語ソートと文字列検索について

ソート順序(照合順序)は言語によって異なります。また、国や文化が異なると、同じアルファベットでも単語のソート方法が異なります。たとえば、デンマークでは、Zの後にÆがあり、YおよびÜは同じ文字の変形とみなされます。

7.1.7 長さセマンティクスについて

文字列内の文字数をバイト長を使用して計算するには、キャラクタ・セット内の各文字のバイト数を知る必要があります。

シングルバイト・キャラクタ・セットの場合、文字列のバイト数と文字数は同じです。マルチバイト・キャラクタ・セットの場合は、1文字または1つのコード・ポイントが1つ以上のバイトで構成されています。可変幅キャラクタ・セットの場合は、バイト長に基づく文字数の計算が困難な場合があります。列の長さをバイト数単位で計算することをバイト・セマンティクス、文字数単位で計算することをキャラクタ・セマンティクスと呼びます。

キャラクタ・セマンティクスは、可変幅のマルチバイト文字列の格納要件を指定する場合に役立ちます。たとえば、Unicodeデータベース(AL32UTF8)に、5文字の英語文字とともに最大5文字の中国語文字を格納できるVARCHAR2列が必要であるとします。バイト・セマンティクスを使用すると、この列には、長さ3バイトである中国語文字用に15バイトと、長さ1バイトである英語文字用に5バイト、合計20バイトが必要です。キャラクタ・セマンティクスを使用すると、この列に必要な文字数は10となります。

関連項目:

7.1.8 UnicodeおよびSQL各国語キャラクタ・データ型について

Unicodeは、世界で話されているほとんどの言語のすべての文字を定義した、文字をエンコードするためのシステムです。Unicodeでは、プラットフォーム、プログラムまたは言語を問わず、すべての文字に一意のコードがあります。

Unicode文字は、Oracle Databaseにおいて次の2つの方法で格納できます。

  • Unicodeデータベースを作成すると、UTF-8でエンコードされた文字をSQL文字データ型(CHARVARCHAR2CLOBおよびLONG)として格納できます。

  • SQL各国語キャラクタ・データ型の列や変数を宣言できます。

SQL各国語キャラクタ・データ型には、NCHARNVARCHAR2およびNCLOBがあります。これらはUnicodeデータの格納のみに使用するので、Unicodeデータ型とも呼ばれます。

すべてのSQL各国語キャラクタ・データ型に使用する各国語キャラクタ・セットは、データベース作成時に指定します。各国語キャラクタ・セットはUTF8またはAL16UTF16(デフォルト)のいずれかに設定できます。

型がNCHARNVARCHAR2の列や変数を宣言する場合、指定する長さはバイト数ではなく文字数になります。

関連項目:

7.2 NLSパラメータの初期値について

SQL Developerを除いて、NLSパラメータの初期値は、データベース初期化パラメータによって設定されます。

DBAは初期化パラメータ・ファイルで初期化パラメータの値を設定でき、その設定は次回データベースが起動されたときに有効になります。

SQL DeveloperでのNLSパラメータの初期値を表7-1に示します。

表7-1 SQL DeveloperでのNLSパラメータの初期値

パラメータ 初期値

NLS_CALENDAR

GREGORIAN

NLS_CHARACTERSET

AL32UTF8

NLS_COMP

BINARY

NLS_CURRENCY

$

NLS_DATE_FORMAT

DD-MON-RR

NLS_DATE_LANGUAGE

AMERICAN

NLS_DUAL_CURRENCY

$

NLS_ISO_CURRENCY

AMERICA

NLS_LANGUAGE

AMERICAN

NLS_LENGTH_SEMANTICS

BYTE

NLS_NCHAR_CHARACTERSET

AL16UTF16

NLS_NCHAR_CONV_EXCP

FALSE

NLS_NUMERIC_CHARACTERS

.,

NLS_SORT

BINARY

NLS_TERRITORY

AMERICA

NLS_TIMESTAMP_FORMAT

DD-MON-RR HH.MI.SSXFF AM

NLS_TIMESTAMP_TZ_FORMAT

DD-MON-RR HH.MI.SSXFF AM TZR

NLS_TIME_FORMAT

HH.MI.SSXFF AM

NLS_TIME_TZ_FORMAT

HH.MI.SSXFF AM TZR

関連項目:

初期化パラメータと初期化パラメータ・ファイルの詳細は、『Oracle Database管理者ガイド』を参照してください。

7.3 NLSパラメータ値の表示

NLSパラメータの現在の値を表示するには、SQL Developerの各国語サポート・パラメータ・レポートを使用します。

各国語サポート・パラメータ・レポートを表示するには、次の手順を実行します。

  1. SQL Developerメニューの「ビュー」メニューで、「レポート」を選択します。
  2. 「レポート」ペインで、「データ・ディクショナリ・レポート」を展開します。
  3. レポートのリストで、「データベース情報」を展開します。
  4. レポートのリストで、「各国語サポート・パラメータ」を選択します。
  5. 「接続の選択」ウィンドウで、hr_connを選択します。
  6. 「OK」をクリックします。

    「接続の選択」ウィンドウが閉じて、「各国語サポート・パラメータ」ペインが表示され、NLSパラメータの名前と現在の値が表示されます。

関連項目:

SQL Developerレポートの詳細は、『Oracle SQL Developerユーザーズ・ガイド』を参照してください。

7.4 NLSパラメータ値の変更

1つ以上のNLSパラメータの値を、次のいずれかの方法で変更できます。

  • 現在および今後の、すべてのSQL Developer接続の値を変更します。

  • クライアントで、対応するNLS環境変数の設定を変更します。

    クライアントでのみ、NLS環境変数の新しい値によって、対応するNLSパラメータの値を上書きします。

    環境変数を使用して、クライアントのロケール依存動作を指定できます。たとえば、Linuxシステムで、次の文はNLS_SORT環境変数の値をFRENCHに設定し、NLS_SORTパラメータの値を上書きします。

    % setenv NLS_SORT FRENCH

    注意:

    環境変数はプラットフォーム依存である場合があります。

  • ALTER SESSION文を次の構文で使用して、現在のセッションの値のみを変更します。

    ALTER SESSION SET parameter_name=parameter_value
      [ parameter_name=parameter_value ]... ;
    

    現在のセッションでのみ、前述のすべての方法で設定された値を、新しい値で上書きします。

    ALTER SESSIONを使用して、異なるロケールの設定でアプリケーションをテストできます。

  • 現在のSQLファンクション起動の値のみを変更します。

    現在のSQLファンクション起動についてのみ、前述のすべての方法で設定された値を、新しい値で上書きします。

内容は次のとおりです。

関連項目:

7.4.1 すべてのSQL Developer接続に対するNLSパラメータ値の変更

現在および今後の、すべてのSQL Developer接続に対するNLSパラメータの値を変更できます。

各国語サポート・パラメータ値を変更するには、次の手順を実行します。

  1. SQL Developerメニューの「ツール」メニューで、「プリファレンス」を選択します。
  2. 「プリファレンス」ウィンドウの左のフレームで、「データベース」を展開します。
  3. データベース・プリファレンスのリストで、「NLS」をクリックします。

    NLSパラメータとその現在値が表示されます。値フィールドはメニューになっています。

  4. 値を変更する各パラメータの右側にあるメニューで、必要な値を選択します。
  5. 「OK」をクリックします。

    これで、NLSパラメータが、指定した値になります。これらの値を確認するには、「NLSパラメータ値の表示」を参照してください。

注意:

NLSパラメータ値に変更が反映されない場合、「レポートの実行」アイコンをクリックします。

関連項目:

SQL Developerのプリファレンスの詳細は、『Oracle SQL Developerユーザーズ・ガイド』を参照してください。

7.4.2 現在のSQLファンクション起動に対するNLSパラメータ値の変更

動作がNLSパラメータの値に依存するSQLファンクションはロケール依存と呼ばれます。ロケール依存のSQLファンクションには、オプションのNLSパラメータがあります。

オプションのNLSパラメータがあるロケール依存のファンクションは次のとおりです。

  • TO_CHAR

  • TO_DATE

  • TO_NUMBER

  • NLS_UPPER

  • NLS_LOWER

  • NLS_INITCAP

  • NLSSORT

前述のファンクションでは、次のNLSパラメータを指定できます。

  • NLS_DATE_LANGUAGE

  • NLS_DATE_LANGUAGE

  • NLS_NUMERIC_CHARACTERS

  • NLS_CURRENCY

  • NLS_ISO_CURRENCY

  • NLS_DUAL_CURRENCY

  • NLS_CALENDAR

  • NLS_SORT

NLSSORTファンクションでは、次のNLSパラメータも指定できます。

  • NLS_LANGUAGE

  • NLS_TERRITORY

  • NLS_DATE_FORMAT

ファンクションでNLSパラメータを指定するには、次の構文を使用します。

'parameter=value' ['parameter=value']...

次の問合せを評価するときに、NLS_DATE_LANGUAGEAMERICANにすると想定します。

SELECT last_name FROM employees WHERE hire_date > '01-JAN-1999';

問合せを実行する前に、NLS_DATE_LANGUAGEAMERICANに設定できます。

ALTER SESSION SET NLS_DATE_LANGUAGE=American;
SELECT last_name FROM employees WHERE hire_date > '01-JAN-1999';

または、ロケール依存のSQLファンクションTO_DATEにオプションのNLS_DATE_LANGUAGEパラメータを使用して、問合せの内部でNLS_DATE_LANGUAGEAMERICANに設定できます。

SELECT last_name FROM employees
WHERE hire_date > TO_DATE('01-JAN-1999', 'DD-MON-YYYY',
                          'NLS_DATE_LANGUAGE=AMERICAN');

ヒント:

通常、SQLファンクションでNLSパラメータにセッションのデフォルト値を使用すると、パフォーマンスが改善されます。このため、デフォルトのNLSパラメータ値を使用する必要がないSQL文の場合にのみ、ロケール依存のSQLファンクションでオプションのNLSパラメータを指定します。

関連項目:

オプションのNLSパラメータがある、ロケール依存のSQLファンクションの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

7.5 各NLSパラメータについて

多くのNLSパラメータを使用できます。

内容は次のとおりです。

関連項目:

7.5.1 ロケールとNLS_LANGパラメータについて

ロケールとは、システムやアプリケーションを実行する言語的および文化的環境のことです。Oracle Database ソフトウェアでロケールを指定する最も簡単な方法は、NLS_LANGパラメータを設定することです。

NLS_LANGパラメータにより、サーバー・セッション(SQL文の処理など)とクライアント・アプリケーション(Oracle Databaseツールの表示の書式など)の両方に対するNLS_LANGUAGENLS_TERRITORYパラメータのデフォルト値を設定できます。また、NLS_LANGパラメータで、入力または表示されるデータに対してクライアント・アプリケーションが使用するキャラクタ・セットも設定できます。

NLS_LANGのデフォルト値は、データベースのインストール中に設定されます。 ALTER SESSION文を使用して、NLS_LANGで設定されるものも含めて、セッションに対するNLSパラメータの値を変更できます。ただし、クライアント環境のNLS設定を変更できるのは、そのクライアントのみです。

関連項目:

7.5.2 NLS_LANGUAGEパラメータについて

このパラメータはデータベースのデフォルト言語を指定します。

指定項目: データベースのデフォルト言語。次の項目に対するデフォルト規則を指定します。

  • サーバー・メッセージの言語

  • 曜日および月の名前と略称の言語は、SQLファンクションTO_CHARおよびTO_DATEで指定されます

  • AM、PM、ADおよびBCに相当する、デフォルト言語の記号

  • ORDER BY句が指定された場合の、文字データに対するデフォルトのソート順序

  • 記述方向

  • 肯定および否定の応答文字列(たとえば、YESとNO)

許容可能な値: Oracleがサポートする言語名。リストは、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

デフォルト値: NLS_LANGによって設定されます。詳細は、「ロケールとNLS_LANGパラメータについて」を参照してください。

デフォルト値の設定対象:

例7-1では、NLS_LANGUAGEITALIANおよびGERMANに設定した場合に、サーバー・メッセージや月の略称にどのように影響するかを示します。

この例をSQL Developerで試す場合は、ワークシートに文や問合せを入力します。ワークシートの詳細は、「SQL Developerにおける問合せの実行」を参照してください。ここに示す結果はSQL*Plusによるもので、SQL Developerとは書式が若干異なります。

例7-1 NLS_LANGUAGEによるサーバー・メッセージおよび月の略称への影響

  1. NLS_LANGUAGEの現在の値を書き留めます。

  2. 手順1の値がITALIANでない場合は変更します。

    ALTER SESSION SET NLS_LANGUAGE=ITALIAN;
    
  3. 存在しない表に問合せをします。

    SELECT * FROM nonexistent_table;
    

    結果:

    SELECT * FROM nonexistent_table
                  *
    ERROR at line 1:
    ORA-00942: tabella o vista inesistente
    
  4. 次の問合せを実行します。

    SELECT LAST_NAME, HIRE_DATE
    FROM EMPLOYEES
    WHERE EMPLOYEE_ID IN (111, 112, 113);
    

    結果:

    LAST_NAME                 HIRE_DATE
    ------------------------- ---------
    Sciarra                   30-SET-97
    Urman                     07-MAR-98
    Popp                      07-DIC-99
     
    3 rows selected.
    
  5. NLS_LANGUAGEの値をGERMANに変更します。

    ALTER SESSION SET NLS_LANGUAGE=GERMAN;
    
  6. 手順3の問合せを繰り返します。

    結果:

    SELECT * FROM nonexistent_table
                  *
    ERROR at line 1:
    ORA-00942: Tabelle oder View nicht vorhanden
    
  7. 手順4の問合せを繰り返します。

    結果:

    LAST_NAME                 HIRE_DATE
    ------------------------- ---------
    Sciarra                   30-SEP-97
    Urman                     07-MRZ-98
    Popp                      07-DEZ-99
     
    3 rows selected.
    
  8. NLS_LANGUAGEを手順1の値に設定します。

関連項目:

7.5.3 NLS_TERRITORYパラメータについて

このパラメータは、日付形書式、タイム・スタンプ書式、小数点文字およびグループ・セパレータ、各国通貨記号、ISO通貨記号、二重通貨記号に対するデフォルト規則を指定します。

指定項目: 次のデフォルト規則。

  • 日付書式

  • タイム・スタンプ書式

  • 小数点記号および桁グループ・セパレータ

  • 各国通貨記号

  • ISO通貨記号

  • 二重通貨記号

許容可能な値: Oracleがサポートする地域名。リストは、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

デフォルト値: NLS_LANGによって設定されます。詳細は、「ロケールとNLS_LANGパラメータについて」を参照してください。

デフォルト値の設定対象:

例7-2では、NLS_TERRITORYJAPANおよびAMERICAに設定した場合に、通貨記号にどのように影響するかを示します。

この例をSQL Developerで試す場合は、ワークシートに文や問合せを入力します。ワークシートの詳細は、「SQL Developerにおける問合せの実行」を参照してください。ここに示す結果はSQL*Plusによるもので、SQL Developerとは書式が若干異なります。

例7-2 NLS_TERRITORYによる通貨記号への影響

  1. NLS_TERRITORYの現在の値を書き留めます。

  2. 手順1の値がJAPANでない場合は変更します。

    ALTER SESSION SET NLS_TERRITORY=JAPAN;
    
  3. 次の問合せを実行します。

    SELECT TO_CHAR(SALARY,'L99G999D99') SALARY
    FROM EMPLOYEES
    WHERE EMPLOYEE_ID IN (100, 101, 102);
    

    結果:

    SALARY
    --------------------
              ©24,000.00
              ©17,000.00
              ©17,000.00
     
    3 rows selected.
    
  4. NLS_TERRITORYの値をAMERICAに変更します。

    ALTER SESSION SET NLS_TERRITORY=AMERICA;
    
  5. 手順3の問合せを繰り返します。

    結果:

    SALARY
    --------------------
              $24,000.00
              $17,000.00
              $17,000.00
     
    3 rows selected.
    
  6. NLS_TERRITORYを手順1の値に設定します。

関連項目:

7.5.4 NLS_DATE_FORMATパラメータについて

このパラメータは、TO_CHARおよびTO_DATEファンクションで使用するデフォルトの日付書式を指定します。

指定内容: TO_CHARおよびTO_DATEファンクション(「問合せにおける変換ファンクションの使用」を参照)で使用するデフォルトの日付書式。

許容可能な値: 有効な任意の日付時間書式モデル。次に例を示します。

NLS_DATE_FORMAT='MM/DD/YYYY'

日付時間書式モデルの詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

デフォルト値: NLS_TERRITORYによって設定されます。詳細は、「NLS_TERRITORYパラメータについて」を参照してください。

デフォルトの日付書式が、特定の地域で使用される規則に対応していない場合があります。ローカライズされた書式で日付を取得するために、'DS'(短い日付)書式および'DL'(長い日付)書式を使用できます。

例7-3では、NLS_TERRITORYAMERICAおよびFRANCEに設定した場合に、デフォルトの日付書式、短い日付書式および長い日付書式にどのように影響するかを示します。

例7-4では、NLS_DATE_FORMATの値を変更し、NLS_TERRITORYによって設定されたデフォルト値を上書きします。

この例をSQL Developerで試す場合は、ワークシートに文や問合せを入力します。ワークシートの詳細は、「SQL Developerにおける問合せの実行」を参照してください。ここに示す結果はSQL*Plusによるもので、SQL Developerとは書式が若干異なります。

例7-3 NLS_TERRITORYによる日付記号への影響

  1. NLS_TERRITORYの現在の値を書き留めます。

  2. 手順1の値がAMERICAでない場合は変更します。

    ALTER SESSION SET NLS_TERRITORY=AMERICA;
    
  3. 次の問合せを実行します。

    SELECT hire_date "Default",
           TO_CHAR(hire_date,'DS') "Short",
           TO_CHAR(hire_date,'DL') "Long"
    FROM employees
    WHERE employee_id IN (111, 112, 113);
    

    結果:

    Default    Short      Long
    --------- ---------- -----------------------------
    30-SEP-05 9/30/2005  Friday, September 30, 2005
    07-MAR-98 3/7/2006   Tuesday, March 07, 2006
    07-DEC-99 12/7/2007  Friday, December 07, 2007
     
    3 rows selected.
    
  4. NLS_TERRITORYの値をFRANCEに変更します。

    ALTER SESSION SET NLS_TERRITORY=FRANCE;
    
  5. 手順3の問合せを繰り返します。

    結果:

    Default  Short      Long
    -------- ---------- ---------------------------
    30/09/05 30/09/2005 friday 30 september 2005
    07/03/06 07/03/2006 tuesday 7 march 2006
    07/12/07 07/12/2007 friday 7 december 2007
     
    3 rows selected.
    

    (フランス語の曜日名と月名を取得するには、問合せを実行する前に、NLS_LANGUAGEまたはNLS_DATE_LANGUAGEFRENCHに設定する必要があります。)

  6. NLS_TERRITORYを手順1の値に設定します。

例7-4 NLS_DATE_FORMATによるNLS_TERRITORYの上書き

  1. NLS_TERRITORYNLS_DATE_FORMATの現在の値を書き留めます。

  2. 手順1NLS_TERRITORYの値がAMERICAでない場合は、次のように変更します。

    ALTER SESSION SET NLS_TERRITORY=AMERICA;
    
  3. 手順1NLS_DATE_FORMATの値が'Day Month ddth'でない場合は、次のように変更します。

    ALTER SESSION SET NLS_DATE_FORMAT='Day Month ddth';
    
  4. 次の問合せを実行します(前述の例の手順3より)。

    SELECT hire_date "Default",
           TO_CHAR(hire_date,'DS') "Short",
           TO_CHAR(hire_date,'DL') "Long"
    FROM employees
    WHERE employee_id IN (111, 112, 113);
    

    結果:

    Default                  Short      Long
    ------------------------ ---------- -----------------------------
    Friday    September 30th 9/30/2005  Tuesday, September 30, 2005
    Tuesday   March     07th 3/7/2006   Saturday, March 07, 2006
    Friday    December  07th 12/7/2007  Tuesday, December 07, 2007
    
    3 rows selected.
    
  5. NLS_TERRITORYNLS_DATE_FORMATを手順1の値に設定します。

関連項目:

7.5.5 NLS_DATE_LANGUAGEパラメータについて

このパラメータは、SQLファンクションTO_CHARおよびTO_DATEで生成される曜日および月の名前と略称の言語、デフォルトの日付書式(NLS_DATE_FORMATで設定)、およびAM、PM、AD、BCに相当する、デフォルト言語の記号を指定します。

指定項目: 次の方法で作成した曜日と月の名前と略号。

許容可能な値: Oracleがサポートする言語名。リストは、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

デフォルト値: NLS_LANGUAGEによって設定されます。詳細は、「NLS_LANGUAGEパラメータについて」を参照してください。

例7-5では、NLS_DATE_LANGUAGEFRENCHおよびSWEDISHに設定した場合に、表示されるシステム日付にどのように影響するかを示します。

この例をSQL Developerで試す場合は、ワークシートに文や問合せを入力します。ワークシートの詳細は、「SQL Developerにおける問合せの実行」を参照してください。ここに示す結果はSQL*Plusによるもので、SQL Developerとは書式が若干異なります。

例7-5 NLS_DATE_LANGUAGEによる、表示されるSYSDATEへの影響

  1. NLS_DATE_LANGUAGEの現在の値を書き留めます。

  2. 手順1NLS_DATE_LANGUAGEの値がFRENCHでない場合は変更します。

    ALTER SESSION SET NLS_DATE_LANGUAGE=FRENCH;
    
  3. 次の問合せを実行します。

    SELECT TO_CHAR(SYSDATE, 'Day:Dd Month yyyy') "System Date"
    FROM DUAL;
    

    結果:

    System Date
    --------------------------
    Vendredi:28 December   2012
    
  4. NLS_DATE_LANGUAGEの値をSWEDISHに変更します。

    ALTER SESSION SET NLS_DATE_LANGUAGE=SWEDISH;
    
  5. 手順3の問合せを繰り返します。

    結果:

    System Date
    -------------------------
    Fredag :28 December   2012
    
  6. NLS_DATE_LANGUAGEを手順1の値に設定します。

関連項目:

7.5.6 NLS_TIMESTAMP_FORMATおよびNLS_TIMESTAMP_TZ_FORMATパラメータについて

このパラメータは、TIMESTAMPオーディオテープおよびTIMESTAMP WITH LOCAL TIME ZONEオーディオテープのデフォルトの日付書式を指定します。

指定項目: 次のデフォルト日付書式:

  • TIMESTAMPオーディオテープ

  • TIMESTAMP WITH LOCAL TIME ZONEオーディオテープ

許容可能な値: 有効な任意の日付時間書式モデル。次に例を示します。

NLS_TIMESTAMP_FORMAT='YYYY-MM-DD HH:MI:SS.FF'
NLS_TIMESTAMP_TZ_FORMAT='YYYY-MM-DD HH:MI:SS.FF TZH:TZM'

日付時間書式モデルの詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

デフォルト値: NLS_TERRITORYによって設定されます。詳細は、「NLS_TERRITORYパラメータについて」を参照してください。

関連項目:

7.5.7 NLS_CALENDARパラメータについて

このパラメータは、データベースの暦法を指定します。

指定項目: データベースの暦法

許容可能な値: Oracleがサポートする暦法。リストは、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

デフォルト値: Gregorian

例7-6では、NLS_CALENDAR'English Hijrah'およびGregorianに設定した場合に、表示されるシステム日付にどのように影響するかを示します。

この例をSQL Developerで試す場合は、ワークシートに文や問合せを入力します。ワークシートの詳細は、「SQL Developerにおける問合せの実行」を参照してください。ここに示す結果はSQL*Plusによるもので、SQL Developerとは書式が若干異なります。

例7-6 NLS_CALENDARによる、表示されるSYSDATEへの影響

  1. NLS_CALENDARの現在の値を書き留めます。

  2. 手順1で、NLS_CALENDARの値が'English Hijrah'でない場合は変更します。

    ALTER SESSION SET NLS_CALENDAR='English Hijrah';
    
  3. 次の問合せを実行します。

    SELECT SYSDATE FROM DUAL;
    

    結果:

    SYSDATE
    -------------------------
    17 Safar             1434
    
  4. NLS_CALENDARの値を'Gregorian'に変更します。

    ALTER SESSION SET NLS_CALENDAR='Gregorian';
    
  5. 次の問合せを実行します。

    SELECT SYSDATE FROM DUAL;
    

    結果:

    SYSDATE
    ---------
    31-DEC-12
    
  6. NLS_CALENDARを手順1の値に設定します。

7.5.8 NLS_NUMERIC_CHARACTERSパラメータについて

このパラメータは、小数点記号(数値の整数部と小数部の区切り)とグループ・セパレータ(千や100万などの桁区切り)を指定します。この文字は数値書式要素Gで戻されます。

指定項目: 小数点記号(数値の整数部と小数部の区切り)とグループ・セパレータ(千や100万などの桁区切り)。この文字は数値書式要素Gで戻されます。

許容可能な値: 次の文字以外の、任意の異なる2つのシングルバイト文字。

  • 数字

  • プラス(+)

  • マイナス(-)

  • 小なり(<)

  • 大なり(>)

デフォルト値: NLS_TERRITORYによって設定されます。詳細は、「NLS_TERRITORYパラメータについて」を参照してください。

SQL文では数値を次のいずれかの方法で表現できます。

  • 数値リテラル

    数値リテラルは引用符で囲まず、小数点文字として常にピリオド(.)を使用し、グループ・セパレータは含めません。

  • テキスト・リテラル

    テキスト・リテラルは一重引用符で囲みます。テキスト・リテラルは、必要に応じて、現行のNLS設定に従って暗黙的または明示的に数値に変換されます。

例7-7では、2つの異なるNLS_NUMERIC_CHARACTERSの設定により、同じ問合せの表示結果にどのような影響があるかを示します。

この例をSQL Developerで試す場合は、ワークシートに文や問合せを入力します。ワークシートの詳細は、「SQL Developerにおける問合せの実行」を参照してください。ここに示す結果はSQL*Plusによるもので、SQL Developerとは書式が若干異なります。

例7-7 NLS_NUMERIC_CHARACTERSによる小数点文字とグループ・セパレータへの影響

  1. NLS_NUMERIC_CHARACTERSの現在の値を書き留めます。

  2. 手順1で、NLS_NUMERIC_CHARACTERSの値が",."(小数点文字はカンマ、グループ・セパレータはピリオド)でない場合は変更します。

    ALTER SESSION SET NLS_NUMERIC_CHARACTERS=",.";
    
  3. 次の問合せを実行します。

    SELECT TO_CHAR(4000, '9G999D99') "Number" FROM DUAL;
    

    結果:

    Number
    ---------
     4.000,00
    
  4. NLS_NUMERIC_CHARACTERSの値を",."(小数点文字はピリオド、グループ・セパレータはカンマ)に変更します。

    ALTER SESSION SET NLS_NUMERIC_CHARACTERS=".,";
    
  5. 次の問合せを実行します。

    SELECT TO_CHAR(4000, '9G999D99') "Number" FROM DUAL;
    

    結果:

    Number
    ---------
     4,000.00
    
  6. NLS_NUMERIC_CHARACTERSを手順1の値に設定します。

関連項目:

7.5.9 NLS_CURRENCYパラメータについて

このパラメータは、各国の通貨記号(数値書式要素Lが返す文字列)を指定します。

指定内容: 各国通貨記号(数値書式要素Lで戻される文字列)。

許容可能な値: 任意の有効な通貨記号文字列。

デフォルト値: NLS_TERRITORYによって設定されます。詳細は、「NLS_TERRITORYパラメータについて」を参照してください。

例7-8では、NLS_CURRENCYの値を変更し、NLS_TERRITORYによって設定されたデフォルト値を上書きします。この例をSQL Developerで試す場合は、ワークシートに文や問合せを入力します。ワークシートの詳細は、「SQL Developerにおける問合せの実行」を参照してください。ここに示す結果はSQL*Plusによるもので、SQL Developerとは書式が若干異なります。

例7-8 NLS_CURRENCYによるNLS_TERRITORYの上書き

  1. NLS_TERRITORYNLS_CURRENCYの現在の値を書き留めます。

  2. 手順1NLS_TERRITORYの値がAMERICAでない場合は、次のように変更します。

    ALTER SESSION SET NLS_TERRITORY=AMERICA;
    
  3. 次の問合せを実行します。

    SELECT TO_CHAR(salary, 'L099G999D99') "Salary"
    FROM EMPLOYEES
    WHERE salary > 13000;
    

    結果:

    Salary
    ---------------------
              $024,000.00
              $017,000.00
              $017,000.00
              $014,000.00
              $013,500.00
    
  4. NLS_CURRENCYの値を'©'に変更します。

    ALTER SESSION SET NLS_CURRENCY='©';
    
  5. 次の問合せを実行します。

    SELECT TO_CHAR(salary, 'L099G999D99') "Salary"
    FROM EMPLOYEES
    WHERE salary > 13000;
    

    結果:

    Salary
    ---------------------
              ©024,000.00
              ©017,000.00
              ©017,000.00
              ©014,000.00
              ©013,500.00
    
  6. NLS_TERRITORYNLS_CURRENCYを手順1の値に設定します。

関連項目:

7.5.10 NLS_ISO_CURRENCYパラメータについて

このパラメータは、ISO通貨記号(数値書式要素Cが返す文字列)を指定します。

指定内容: ISO通貨記号(数値書式要素Cで戻される文字列)。

許容可能な値: 任意の有効な通貨記号文字列。

デフォルト値: NLS_TERRITORYによって設定されます。詳細は、「NLS_TERRITORYパラメータについて」を参照してください。

各国通貨記号は不明確なことがありますが、ISO通貨記号は一意です。

例7-9では、地域AUSTRALIAおよびAMERICAは各国通貨記号が同じですが、ISO通貨記号は異なることを示します。

この例をSQL Developerで試す場合は、ワークシートに文や問合せを入力します。ワークシートの詳細は、「SQL Developerにおける問合せの実行」を参照してください。ここに示す結果はSQL*Plusによるもので、SQL Developerとは書式が若干異なります。

例7-9 NLS_ISO_CURRENCY

  1. NLS_TERRITORYNLS_ISO_CURRENCYの現在の値を書き留めます。

  2. 手順1NLS_TERRITORYの値がAUSTRALIAでない場合は変更します。

    ALTER SESSION SET NLS_TERRITORY=AUSTRALIA;
    
  3. 次の問合せを実行します。

    SELECT TO_CHAR(salary, 'L099G999D99') "Local",
            TO_CHAR(salary, 'C099G999D99') "ISO"
    FROM EMPLOYEES
    WHERE salary > 15000;
    

    結果:

    Local                 ISO
    --------------------- ------------------
              $024,000.00      AUD024,000.00
              $017,000.00      AUD017,000.00
              $017,000.00      AUD017,000.00
    
  4. NLS_TERRITORYの値をAMERICAに変更します。

    ALTER SESSION SET NLS_TERRITORY=AMERICA;
    
  5. 次の問合せを実行します。

    SELECT TO_CHAR(salary, 'L099G999D99') "Local",
            TO_CHAR(salary, 'C099G999D99') "ISO"
    FROM EMPLOYEES
    WHERE salary > 15000;
    

    結果:

    Local                 ISO
    --------------------- ------------------
              $024,000.00      USD024,000.00
              $017,000.00      USD017,000.00
              $017,000.00      USD017,000.00
    
  6. NLS_TERRITORYNLS_ISO_CURRENCYを手順1の値に設定します。

関連項目:

7.5.11 NLS_DUAL_CURRENCYパラメータについて

このパラメータは、二重通貨記号(ユーロ移行期間中にユーロ通貨記号をサポートするために導入)を指定します。

指定項目: 2重通貨記号(ユーロ移行期間中にユーロ通貨記号をサポートするために導入)

許容可能な値: 任意の有効な通貨記号文字列。

デフォルト値: NLS_TERRITORYによって設定されます。詳細は、「NLS_TERRITORYパラメータについて」を参照してください。

関連項目:

7.5.12 NLS_SORTパラメータについて

このパラメータは、ORDER BY句を持つ問合せの言語ソート順序(照合順序)を指定します。

指定内容: ORDER BY句がある問合せの言語ソート順序(照合順序)。

許容可能な値:

  • BINARY

    ソート順序は、データ型に応じて、データベース・キャラクタ・セットまたは各国キャラクタ・セットのバイナリ・ソート順序に基づいています。

  • Oracleがサポートする任意の言語ソート名

    ソート順序は、指定した言語ソート名の順序に基づいています。通常、言語ソート名は言語名と同じですが、異なる場合もあります。サポートされている言語ソート名のリストは、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

デフォルト値: NLS_LANGUAGEによって設定されます。詳細は、「NLS_LANGUAGEパラメータについて」を参照してください。

例7-10では、2つの異なるNLS_SORTの設定により、同じ問合せの表示結果にどのような影響があるかを示します。設定は、BINARYと従来のスペイン語(SPANISH_M)です。従来のスペイン語では、ch、llおよびñをそれぞれc、lおよびnに続く文字として扱います。

この例をSQL Developerで試す場合は、ワークシートに文や問合せを入力します。ワークシートの詳細は、「SQL Developerにおける問合せの実行」を参照してください。ここに示す結果はSQL*Plusによるもので、SQL Developerとは書式が若干異なります。

大/小文字およびアクセントを区別しないソート

Oracle Databaseの操作では、大/小文字および文字のアクセントが区別されます。大/小文字を区別しないソートを実行するには、NLS_SORTパラメータの値に_CIを付け加えます(BINARY_CIGERMAN_CIなど)。大/小文字および文字のアクセントのどちらも区別しないソートを実行するには、NLS_SORTパラメータの値に_AIを付け加えます(BINARY_AIFRENCH_M_AIなど)。

例7-10 NLS_SORTによる言語ソート順序への影響

  1. スペイン語の単語の表を作成します。

    CREATE TABLE temp (name VARCHAR2(15));
    
  2. 表にスペイン語の単語を移入します。

    INSERT INTO temp (name) VALUES ('laguna');
    INSERT INTO temp (name) VALUES ('llama');
    INSERT INTO temp (name) VALUES ('loco');
    
  3. NLS_SORTの現在の値を書き留めます。

  4. 手順3NLS_SORTの値がBINARYでない場合は、次のように変更します。

    ALTER SESSION SET NLS_SORT=BINARY;
    
  5. 次の問合せを実行します。

    SELECT * FROM temp ORDER BY name;
    

    結果:

    NAME
    ---------------
    laguna
    llama
    loco
    
  6. NLS_SORTの値をSPANISH_M(従来のスペイン語)に変更します。

    ALTER SESSION SET NLS_SORT=SPANISH_M;
    
  7. 手順5の問合せを繰り返します。

    結果:

    NAME
    ---------------
    laguna
    loco
    llama
    
  8. 表を削除します。

    DROP TABLE temp;
    
  9. NLS_SORTを手順3の値に設定します。

関連項目:

7.5.13 NLS_COMPパラメータについて

このパラメータは、SQL操作の文字比較動作を指定します。

指定項目: SQL操作の文字比較動作。

許容可能な値:

  • BINARY

    SQLで、文字のバイナリ・コードを比較します。バイナリ・コードが高い方の文字が、もう一方の文字よりも大きくなります。

  • LINGUISTIC

    SQLで、NLS_SORTパラメータの値に基づいた言語比較を実行します。詳細は、「NLS_SORTパラメータについて」を参照してください。

  • ANSI

    この値は、下位互換性のみを目的として用意されています。

デフォルト値: BINARY

例7-11では、NLS_COMP設定に応じた問合せの結果を示します。

この例をSQL Developerで試す場合は、ワークシートに文や問合せを入力します。ワークシートの詳細は、「SQL Developerにおける問合せの実行」を参照してください。ここに示す結果はSQL*Plusによるもので、SQL Developerとは書式が若干異なります。

例7-11 NLS_COMPによるSQL文字比較への影響

  1. NLS_SORTNLS_COMPの現在の値を書き留めます。

  2. 手順1で、NLS_SORTNLS_COMPの値がそれぞれSPANISH_M(従来のスペイン語)とBINARYでない場合は変更します。

    ALTER SESSION SET NLS_SORT=SPANISH_M NLS_COMP=BINARY;
    
  3. *次の問合せを実行します。

    SELECT LAST_NAME FROM EMPLOYEES
    WHERE LAST_NAME LIKE 'C%';
    

    結果:

    LAST_NAME                 
    ------------------------- 
    Cabrio                    
    Cambrault                 
    Cambrault                 
    Chen                      
    Chung                     
    Colmenares                
     
    6 rows selected
    
  4. NLS_COMPの値をLINGUISTICに変更します。

    ALTER SESSION SET NLS_COMP=LINGUISTIC;
    
  5. 手順3の問合せを繰り返します。

    結果:

    LAST_NAME                 
    ------------------------- 
    Cabrio                    
    Cambrault                 
    Cambrault                 
    Colmenares                
     
    4 rows selected
    

    従来のスペイン語ではchcに続く1文字として扱うため、ここではChenとChungは返されません。

  6. NLS_SORTNLS_COMPを手順1の値に設定します。

関連項目:

7.5.14 NLS_LENGTH_SEMANTICSパラメータについて

このパラメータは、文字データ型CHARVARCHAR2およびLONGの列の長さセマンティクス、つまりこれらの列がバイト単位または文字単位のどちらで指定されているかを指定します。これらの列がバイトまたは文字のいずれかで指定されるかを指定します(パラメータ設定後に宣言された列にのみ適用可能)。

指定広告: 文字データ型CHARVARCHAR2LONGの列の長さセマンティクス。これらの列がバイトまたは文字のいずれかで指定されるかを指定します(パラメータ設定後に宣言された列にのみ適用可能)。

許容可能な値:

  • BYTE

    新しいCHARVARCHAR2およびLONGの列をバイト単位で指定します。

  • CHAR

    新しいCHARVARCHAR2およびLONGの列を文字単位で指定します。

デフォルト値: BYTE

この例をSQL Developerで試す場合は、ワークシートに文や問合せを入力します。ワークシートの詳細は、「SQL Developerにおける問合せの実行」を参照してください。ここに示す結果はSQL*Plusによるもので、SQL Developerとは書式が若干異なります。

例7-12 NLS_LENGTH_SEMANTICSがVARCHAR2列の格納に与える影響

  1. NLS_LENGTH_SEMANTICSの現在の値を書き留めます。

  2. 手順1で、NLS_LENGTH_SEMANTICSの値がBYTEでない場合は変更します。

    ALTER SESSION SET NLS_LENGTH_SEMANTICS=BYTE;
    
  3. VARCHAR2列のある表を作成します。

    CREATE TABLE SEMANTICS_BYTE(SOME_DATA VARCHAR2(20));
    
  4. 「接続」タブをクリックします。

  5. 「接続」フレームで、hr_connを展開します。

  6. スキーマ・オブジェクト・タイプのリストで、「表」を展開します。

  7. 表のリストで、SEMANTICS_BYTEを選択します。

    「接続」フレームの右側にある「列」ペインに、「列名」 SOME_DATAの「データ型」VARCHAR2(20 BYTE)であると表示されます。

  8. NLS_LENGTH_SEMANTICSの値をCHARに変更します。

    ALTER SESSION SET NLS_LENGTH_SEMANTICS=CHAR;
    
  9. VARCHAR2列のある別の表を作成します。

    CREATE TABLE SEMANTICS_CHAR(SOME_DATA VARCHAR2(20));
    
  10. 「接続」フレームで、「リフレッシュ」アイコンをクリックします。

    今回はSEMANTICS_CHARを含む表のリストが表示されます。

  11. SEMANTICS_CHARを選択します。

    「列」ペインに、「列名」 SOME_DATAの「データ型」VARCHAR2(20 CHAR)であると表示されます。

  12. SEMANTICS_BYTEを再び選択します。

    「列」ペインに、「列名」SOME_DATAの「データ名データ型」がVARCHAR2(20 BYTE)であると表示されます。

  13. NLS_LENGTH_SEMANTICSを手順1の値に設定します。

関連項目:

7.6 グローバルなアプリケーションでのUnicodeの使用方法

Unicodeデータは挿入および取得できます。データはデータベースおよびクライアント間で透過的に変換され、クライアント・プログラムがデータベース・キャラクタ・セットおよび各国キャラクタ・セットから独立していることを保証します。

内容は次のとおりです。

関連項目:

7.6.1 SQLおよびPL/SQLにおけるUnicode文字列リテラルの表現

SQLとPL/SQLでUnicode文字列リテラルを表現する方法は3つあります。

SQLとPL/SQLでUnicode文字列リテラルを表現する方法は3つあります。

  • N'string'

    例: N'résumé'

    制限: 「キャラクタ・セット変換中のデータ消失の回避」を参照してください。

  • NCHR(number)

    SQLファンクションNCHRは、各国語キャラクタ・セットでバイナリがnumberに相当する文字を返します。返される文字のデータ型はNVARCHAR2です。

    例: NCHR(36)は、デフォルトの各国語キャラクタ・セットであるAL16UTF16では、$を表します。

    制限: NCHR(number)の値の移植性は、同じ各国語キャラクタ・セットを使用するアプリケーションに限定されます。

  • UNISTR('string')

    SQLファンクションUNISTRでは、stringを各国語キャラクタ・セットに変換します。

    移植性とデータ保護のために、stringに含めるのはASCII文字とUnicodeエンコーディング値のみとすることをお薦めします。Unicodeエンコーディング値は\xxxxという形式をとり、xxxxはUCS-2エンコーディング形式で文字コード値を表す16進値です。

    例: UNISTR('G\0061ry')は'Gary'を表します。

    ASCII文字は、データベース・キャラクタ・セットに変換されてから、各国語キャラクタ・セットに変換されます。Unicodeエンコーディング値は、各国語キャラクタ・セットに直接変換されます。

関連項目:

7.6.2 キャラクタ・セット変換中のデータ消失の回避

SQLまたはPL/SQL文の一部として、リテラル(接頭辞Nあり、またはなし)が、文の残りとして、同じキャラクタ・セットでエンコードされます。クライアント側では、文はNLS_LANGパラメータで決定されるクライアントのキャラクタ・セットでエンコードされます。サーバー側では、文はデータベースのキャラクタ・セットでエンコードされます。

SQLまたはPL/SQL文がクライアントからデータベースに送信されると、それに応じてキャラクタ・セットが変換されます。クライアントがテキスト・リテラルで使用しているすべての文字がデータベース・キャラクタ・セットに含まれていない場合、データはこの変換で消失します。NCHAR文字列リテラルはデータベース・キャラクタ・セットに依存しないよう設計されているため、CHARテキスト・リテラルよりも影響を受けやすくなります。

互換性のないデータベース・キャラクタ・セットへの変換時のデータ消失を回避するために、NCHARリテラル置換機能を有効にすることができます。詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。