ヘッダーをスキップ

Oracle Database 2日で開発者ガイド
11g リリース1(11.1)

E05694-03
目次
目次
索引
索引

戻る 次へ

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

この章では、グローバリゼーション・サポート環境でのアプリケーションの開発方法について説明し、SQLおよびPL/SQL両方を使用してUnicodeプログラミングの使用方法を示します。Unicodeプログラミングによって、複数の言語と互換性のあるSQLおよびPL/SQLコードを記述することができます。

この章の内容は次のとおりです。

グローバリゼーションの概要

Oracle Databaseのグローバリゼーション・サポートにより、各国語でデータを格納、処理、取得できます。さらにデータベース・ユーティリティ、エラー・メッセージ、ソート順序、日付、時刻、通貨、数字、カレンダ規則が、自動的に固有の言語およびロケールに調整されます。

グローバリゼーション・サポートには各国語サポート(NLS)機能が含まれます。各国語サポートは、各国の言語を選択し、データを特定のキャラクタ・セットで格納する機能です。グローバリゼーション・サポートにより、世界のどこからでも同時にアクセスし、実行できる多言語アプリケーションおよびソフトウェア製品を開発できるようになります。アプリケーションにより、ユーザー・インタフェースの内容をレンダリングし、各国語およびユーザーのロケール・プリファレンスでデータを処理できます。

参照:

  • グローバリゼーション・サポート環境の設定を含む、Oracle Databaseを使用したグローバリゼーション・サポートの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

 

グローバリゼーション・サポート機能

Oracle Databaseの標準機能には次のものが含まれます。

現在のNLSパラメータ値の表示

SQL Developerでは各国語サポート・パラメータ・レポートによりグローバリゼーション・サポートのパラメータ値がリストされます。

このレポートのNLSパラメータ値は、「SQL Developer環境におけるNLSパラメータ値の使用」で説明しているように、SQL Developer内のすべてのセッションの最初に使用します。

各国語サポート・パラメータ・レポートを表示するには、次の手順を実行します。
  1. SQL Developerウィンドウで、「Reports」タブをクリックして「Reports」ナビゲータを表示します。

  2. 「Data Dictionary Reports」ノードの横にあるプラス記号(+)をクリックし、展開します。

  3. 「About Your Database」ノードの横にあるプラス記号(+)をクリックし、展開します。

  4. 「National Language Support Parameters」をクリックします。

  5. 「Select Connection」ダイアログ・ボックスで、「Connection」hr_connに設定します。

    「OK」をクリックします。


    画像の説明

  6. 「National Language Support Parameters」ペインのレポートには、選択した接続に関連付けられたデータベースに対するNLSパラメータの現在の値が表示されます。この値は、NLS_CALENDARNLS_CHARSETNLS_COMPNLS_CURRENCYNLS_DATE_FORMATなどです。


    画像の説明

    参照:

    • 「SQL Developer環境におけるNLSパラメータ値の使用」

    • 現行のデータベース・インスタンスのNLS設定を表示するV$NLS_PARAMETERSビューの詳細は、『Oracle Databaseリファレンス』を参照してください。

    • NLSパラメータを含むSQL Developerプリファレンスの詳細は、『Oracle Database SQL Developerユーザーズ・ガイド』を参照してください。

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

    • グローバリゼーション・サポート環境の設定を含む、Oracle Databaseを使用したグローバリゼーション・サポートの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

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

     

SQL Developer環境におけるNLSパラメータ値の使用

Oracleデータベースでは、NLSパラメータ値がデータベース初期化パラメータによって最初に決定されます。DBAは初期化ファイルの値を設定でき、その変更は次のデータベースの設定に影響します。データベース・ユーザーは、次の文を使用することで現在のセッション(データベースへの現在の接続)に対する特定のパラメータ値を変更できます。

ALTER SESSION SET parameter-name = "value";

SQL Developerを使用するときは、データベース初期化ファイルのパラメータ値は使用されないことに注意してください。かわりに、SQL Developerでは次を含むパラメータ値が最初(インストール後)に使用されます。

NLS_LANG,"AMERICAN"
NLS_TERR,"AMERICA"
NLS_CHAR,"AL32UTF8"
NLS_SORT,"BINARY"
NLS_CAL,"GREGORIAN"
NLS_DATE_LANG,"AMERICAN"
NLS_DATE_FORM,"DD-MON-RR"

SQL Developer(すべての接続における「SQL Worksheet」ウィンドウや各国語サポート・パラメータ・レポートなど)のすべてのセッションで使用されるこれらのNLSパラメータ値およびその他のNLSパラメータ値は、NLSパラメータの「Preferences」ペインで表示できます。

NLSパラメータの値を変更するには、次のオプションが必要です。

このように、データベース・アプリケーション開発時に、異なる言語設定をテストすることに大きな柔軟性を得られます。たとえば、ALTER SESSIONを使用して、異なる言語設定を使用する次のPL/SQL文の出力を表示し、接続を切断し再接続することでSQL Developerのデフォルト設定に戻すことができます。

たとえば、プリファレンスのNLS_LANGUAGE値がFRENCHに設定されており、今日が2007年3月1日であると仮定します。「SQL Worksheet」でSELECT sysdate FROM dual;と入力し、「Run Script」アイコンをクリックすると、次のように出力されます。

SYSDATE                   
------------------------- 
01-MARS -07 

ALTER SESSION SET NLS_LANGUAGE='AMERICAN';と入力し、前述のSELECT文を入力すると、次のように出力されます。

SYSDATE                   
------------------------- 
01-MAR-07

この例を継続し、現在の接続から切断し、再接続すると、セッションのNLS_LANGUAGE値は(プリファレンスで指定したとおり)FRENCHとなり、SELECT文による出力は次のようになります。

SYSDATE                   
------------------------- 
01-MARS -07 

参照:

  • NLSパラメータを含むSQL Developerプリファレンスの詳細は、『Oracle Database SQL Developerユーザーズ・ガイド』を参照してください。

  • グローバリゼーション・サポート環境の設定を含む、Oracle Databaseを使用したグローバリゼーション・サポートの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

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

 

すべてのセッションに対するNLSパラメータ値の変更

NLSパラメータに対するSQL Developerのユーザー・プリファレンスにより、(現在および今後の)すべてのSQL Developer接続で使用される値が設定されます。データベースのNLSパラメータの「Preferences」ペインでパラメータ値を表示し、変更できます。

「現在のNLSパラメータ値の表示」で説明しているように、これらのプリファレンスはNLSパラメータ値レポートでも表示されます。

各国語サポート・パラメータ値を変更するには、次の手順を実行します。
  1. SQL Developerウィンドウで、「Tools」をクリックしてから「Preferences」をクリックします。

  2. 「Preferences」ダイアログ・ボックスで、「Database」ノードを展開し、「NLS Parameters」を選択します。


    画像の説明

    各テキスト・ラベルは対応するNLS_xxxパラメータを説明する用語です。

  3. 目的の変更をパラメータ値に対して行います。

    たとえば、スペイン語環境を反映するようにNLS_LANGUAGEパラメータ値を変更するには、「Language」SPANISHを選択します。

  4. 「OK」をクリックします。

    参照:

    • NLSパラメータを含むSQL Developerプリファレンスの詳細は、『Oracle Database SQL Developerユーザーズ・ガイド』を参照してください。

    • グローバリゼーション・サポート環境の設定を含む、Oracle Databaseを使用したグローバリゼーション・サポートの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

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

     

グローバリゼーション・サポート環境の設定

この項では、グローバリゼーション・サポート環境の設定方法を説明します。

参照:

  • グローバリゼーション・サポート環境の設定を含む、Oracle Databaseを使用したグローバリゼーション・サポートの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

 

NLS_LANGパラメータを使用したロケールの選択

ロケールとはシステムやプログラムを実行する言語的および文化的環境のことです。Oracleソフトウェアでロケール動作を指定する最も簡単な方法は、NLS_LANGパラメータを設定することです。このパラメータによって、クライアント・アプリケーションおよびデータベースで使用される言語と地域が設定されます。また、クライアント・プログラムによって入力または表示されるデータのキャラクタ・セットであるクライアントのキャラクタ・セットも設定されます。

NLS_LANGパラメータにより、サーバー・セッション(SQL文の処理など)およびクライアント・アプリケーション(Oracleツールの表示の書式など)の両方で使用する言語および地域環境が設定されます。

インストール時に定義したデフォルトのNLS_LANG動作はほとんどの状況において適切ですが、セッション時に動的にNLS環境を変更することもあります。この場合、ALTER SESSION文を使用することで、NLS_LANGUAGENLS_TERRITORYおよびその他のNLSパラメータを変更できます。

ALTER SESSION文を使用してクライアント・キャラクタ・セットの設定を変更できないことに注意してください。ALTER SESSION文はセッション環境のみを変更します。クライアントが新しい設定を獲得せず、ローカル環境を変更しない場合、ローカル・クライアントNLS環境は変更されません。

参照:

  • グローバリゼーション・サポート環境の設定を含む、Oracle Databaseを使用したグローバリゼーション・サポートの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

 

NLSパラメータの設定

各国語サポート(NLS)パラメータにより、クライアントおよびサーバー両方でのロケール固有の動作が決定します。NLSパラメータは様々な方法で指定できます。SQLファンクションでユーザー・セッションのパラメータを変更し、パラメータを上書きできます。

NLSパラメータの設定は、次の2つの方法で変更できます。

クライアントでのNLS環境変数の使用を含むNLSパラメータを設定する他の方法は、プラットフォーム依存である場合があります。これは、クライアントに対してロケール依存の動作を指定、または初期化パラメータ・ファイルのセッションのデフォルト値の設定を上書きします。たとえば、Linuxシステムの場合は次のようになります。

% setenv NLS_SORT FRENCH

参照

  • NLSパラメータの設定の詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』のNLSパラメータの設定に関する項を参照してください。

  • ALTER SESSION文の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

  • TO_CHARファンクションを含むSQLファンクションの詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

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

  • グローバリゼーション・サポートで使用する初期化パラメータの詳細は、『Oracle Databaseリファレンス』を参照してください。

 

言語および地域パラメータの設定

ローカル地域に応じて異なるNLSパラメータを設定することにより、データベース・セッションにおいて異なる文化的設定を使用できます。たとえば、地域がAMERICAと定義されている場合であっても、指定したデータベース・セッションに対する基本通貨としてユーロ(EUR)を設定し、補助通貨として日本の円(JPY)を設定できます。

参照:

 

NLS_LANGUAGEパラメータの使用

NLS_LANGUAGEパラメータは有効な言語名に対して設定できます。デフォルトはNLS_LANG設定から導出されます。NLS_LANGUAGEにより、次のセッション特性に対するデフォルトの規則が指定されます。

NLS_LANGUAGEパラメータを設定するには、次の手順を実行します。

NLS_LANGUAGEパラメータ値を変更し、その影響を問合せからの結果の表示で確認できます。次の例は、最初にNLS_LANGUAGEをイタリア語に設定し、次にドイツ語に設定したことを示しています。

  1. SQL Developerで、Oracle Databaseがインストールされた現行の言語を記録します。

    「Connections」で、まず「Data Dictionary Reports」を展開し、次に「About Your Database」、そして「National Language Support Parameters」を展開します。「Select Connection」ダイアログ・ボックスで、接続のリストからhr_connを選択します。現行の言語はNLS_LANGUAGEの後にリストされます。

  2. 言語をイタリア語に設定します。

    ALTER SESSION SET NLS_LANGUAGE=ITALIAN;
    
    
  3. SELECT文を入力して、イタリア語への変更後の出力書式をチェックします。

    SELECT last_name, hire_date, ROUND(salary/8,2) salary FROM employees
        WHERE employee_id IN (111, 112, 113);
    
    

    この例では次のように出力されます。月名の略称にイタリア語が使用されていることに注意してください。

    LAST_NAME                 HIRE_DATE     SALARY
    ------------------------- --------- ----------
    Sciarra                   30-SET-97      962.5
    Urman                     07-MAR-98        975
    Popp                      07-DIC-99      862.5
    
    
  4. 言語をドイツ語に設定します。

    ALTER SESSION SET NLS_LANGUAGE=GERMAN;
    
    
  5. SELECT文を入力して、ドイツ語への変更後の出力書式をチェックします。

    SELECT last_name, hire_date, ROUND(salary/8,2) salary FROM employees
        WHERE employee_id IN (111, 112, 113);
    
    

    この例では次のように出力されます。月名の略称にドイツ語が使用されていることに注意してください。

    LAST_NAME                 HIRE_DATE     SALARY
    ------------------------- --------- ----------
    Sciarra                   30-SEP-97      962.5
    Urman                     07-MRZ-98        975
    Popp                      07-DEZ-99      862.5
    
    
  6. 手順1に示された元の設定に戻すNLS_LANGUAGEを設定します。次に例を示します。

    ALTER SESSION SET NLS_LANGUAGE=AMERICAN;
    

    参照:

    • NLS_LANGUAGEパラメータの詳細は、『Oracle Databaseリファレンス』を参照してください。

    • サポートされる言語および地域を含むロケール情報の詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

     

NLS_TERRITORYパラメータの使用

NLS_TERRITORYパラメータは有効な任意の地域名に対して設定できます。デフォルトはNLS_LANG設定から導出されます。NLS_TERRITORYにより、次の日付および数値書式特性に対するデフォルトの規則が指定されます。

NLS_TERRITORYパラメータを変更することにより、導出されたすべてのNLSセッション・パラメータが新しい地域のデフォルトの値にリセットされます。

NLS_TERRITORYパラメータを設定するには、次の手順を実行します。

NLS_LANGUAGEパラメータ値を変更し、その影響を問合せからの結果の表示で確認できます。次の例は、NLS_TERRITORYをドイツに設定した結果を示しています。

  1. SQL Developerで、初期のSQL Developerデフォルト設定を使用して出力の形式をチェックするSELECT文を入力します。

    SELECT TO_CHAR(salary,'L99G999D99') salary FROM employees
       WHERE employee_id IN (100, 101, 102);
    
    

    たとえば、NLS_TERRITORYAMERICAの場合、この例では次のように出力されます。

    SALARY               
    -------------------- 
              $24,000.00 
              $17,000.00 
              $17,000.00
    
    3 rows selected
    
    
  2. Oracle Databaseがインストールされた現行の地域を記録します。

    「Connections」で、まず「Data Dictionary Reports」、次に「About Your Database」、そして「National Language Support Parameters」を展開します。「Select Connection」ダイアログ・ボックスで、接続のリストからhr_connを選択します。現行の地域はNLS_TERRITORYの後にリストされます。

  3. NLS_TERRITORYをドイツに設定します。

    ALTER SESSION SET NLS_TERRITORY=GERMANY;
    
    
  4. SELECT文を入力して、ドイツへの変更後の出力書式をチェックします。

    SELECT TO_CHAR(salary,'L99G999D99') salary FROM employees
       WHERE employee_id IN (100, 101, 102);
    
    

    この例では次のように出力されます。3桁区切りがピリオド(.)に変更され、小数点文字がカンマ(,)に変更されました。通貨記号はドル($)からユーロ(€)に変更されました。ただし、基礎となるデータは同じであるため、数字は変更されません(つまり、通貨の換算レートは織り込まれません)。

    SALARY               
    -------------------- 
            €4.000,00   
            €7.000,00   
            €7.000,00
    
    3 rows selected
    
    
  5. 手順2に示された元の設定に戻すNLS_TERRITORYを設定します。次に例を示します。

    ALTER SESSION SET NLS_TERRITORY=AMERICA;
    

    参照:

    • NLS_TERRITORYパラメータの詳細は、『Oracle Databaseリファレンス』を参照してください。

    • 「NLS_LANGUAGEパラメータの使用」

    • サポートされる言語および地域を含むロケール情報の詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

     

日付および時刻パラメータの設定

日付および時刻の表示を制御し、ローカル書式に基づいて時刻、曜日、月および年のそれぞれの表記規則を許可できます。たとえば、日付を表示する場合、英国ではDD/MM/YYYY書式を使用して表示されますが、中国では一般的にYYYY-MM-DD書式が使用されます。

参照:

  • 日時データ型およびタイムゾーン・サポートの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

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

 

日付書式の使用

次の表で説明しているように、日付には複数の異なる書式を使用できます。

  説明   

エストニア 

dd.mm.yyyy 

28.02.2005 

ドイツ 

dd.mm.rr 

28.02.05 

中国 

yyyy-mm-dd 

2005-02-28 

英国 

dd/mm/yyyy 

28/02/2005 

米国 

mm/dd/yyyy 

02/28/2005 

NLS_DATE_FORMATパラメータを使用するには、次の手順を実行します。

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'

Oracleのデフォルトの日付書式が、特定の地域で使用される文化固有の規則に常に対応しているとはかぎりません。'DS'および'DL'書式モデルをそれぞれ使用し、SQLで短い日付書式および長い日付書式を使用することにより、ローカライズされた書式で日付を取得できます。次の例は、短い日付書式および長い日付書式の使用例を示しています。

  1. SQL Developerで、Oracle Databaseがインストールされた現行の地域および日付書式を記録します。

    「Connections」で、まず「Data Dictionary Reports」、次に「About Your Database」、そして「National Language Support Parameters」を展開します。「Select Connection」ダイアログ・ボックスで、接続のリストからhr_connを選択します。現行の日付書式はNLS_DATE_FORMATの後に、現行の地域はNLS_TERRITORYの後にリストされます。

  2. NLS_TERRITORYをアメリカに設定します。

    ALTER SESSION SET NLS_TERRITORY = America;
    
    
  3. 書式モデルを使用して日付を選択します。

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

    この例では次のように出力されます。

    HIRE_DATE        Short      Long
    ---------------- ---------- ----------------------------------- 
    30-SEP-97        9/30/1997  Tuesday, September 30, 1997
    07-MAR-98        3/7/1998   Saturday, March 07, 1998
    07-DEC-99        12/7/1999  Tuesday, December 07, 1999
    
    
  4. 手順1に示された元の設定に戻すNLS_TERRITORYおよびNLS_DATE_FORMATを設定します。次に例を示します。

    ALTER SESSION SET NLS_TERRITORY=AMERICA;
    ALTER SESSION SET NLS_DATE_FORMAT="MM/DD/YYYY";
    
NLS_DATE_LANGUAGEパラメータを使用するには、次の手順を実行します。

NLS_DATE_LANGUAGEにより、TO_CHARおよびTO_DATEファンクションで生成される曜日名および月名の言語が指定されます。NLS_DATE_LANGUAGEでは、NLS_LANGUAGEにより暗黙的に指定された言語が上書きされます。NLS_DATE_LANGUAGEパラメータにはNLS_LANGUAGEパラメータと同じ構文があり、サポートされるすべての言語が有効値です。

NLS_DATE_LANGUAGEパラメータにより、次に使用される言語も決定されます。

デフォルトの日付書式では、NLS_DATE_LANGUAGEパラメータによって決定される月名の略称が使用されます。たとえば、デフォルトの日付書式がDD-MON-YYYYであり、NLS_DATE_LANGUAGE = FRENCHである場合、日付は次のように挿入されます。

INSERT INTO table_name VALUES ('12-F騅r.-2007');

次の例は、NLS_DATE_LANGUAGEをフランス語に設定した結果を示しています。

  1. SQL Developerで、Oracle Databaseがインストールされた現行の曜日名および月名の言語を記録します。

    「Connections」で、まず「Data Dictionary Reports」、次に「About Your Database」、そして「National Language Support Parameters」を展開します。「Select Connection」ダイアログ・ボックスで、接続のリストからhr_connを選択します。現行の曜日名および月名の言語はNLS_DATE_LANGUAGEの後にリストされます。

  2. NLS_DATE_LANGUAGEをフランス語に設定します。

    ALTER SESSION SET NLS_DATE_LANGUAGE = FRENCH;
    
    
  3. 現在のシステム日付を選択します。

    SELECT TO_CHAR(SYSDATE, 'Day:Dd Month yyyy') FROM DUAL
    
    

    この例では次のように出力されます。

    TO_CHAR(SYSDATE,'DAY:DDMONTHYYYY') 
    ---------------------------------- 
    Lundi   :05 Mars      2007
    
    
  4. 手順1に示された元の設定に戻すNLS_DATE_LANGUAGEを設定します。次に例を示します。

    ALTER SESSION SET NLS_DATE_LANGUAGE=AMERICAN;
    

    参照:

    • NLS_DATE_FORMATパラメータの詳細は、『Oracle Databaseリファレンス』を参照してください。

    • NLS_DATE_LANGUAGEパラメータの詳細は、『Oracle Databaseリファレンス』を参照してください。

    • 「時刻書式の使用」

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

    • 日時データ型およびタイムゾーン・サポートの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

     

時刻書式の使用

この項では、NLS_TIMESTAMP_FORMATおよびNLS_TIMESTAMP_TZ_FORMATパラメータの使用方法を説明します。時刻書式の例のいくつかは次の表のとおりです。

  説明   

エストニア 

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により、TIMESTAMPおよびTIMESTAMP WITH LOCAL TIME ZONEデータ型のデフォルトの日付書式が定義されます。NLS_TERRITORYでは、NLS_TIMESTAMP_FORMATのデフォルト値が決定されます。NLS_TIMESTAMP_FORMATの値は有効な任意の日付時間書式モデルです。

次の例はNLS_TIMESTAMP_FORMATの値を示しています。

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

NLS_TIMESTAMP_TZ_FORMATパラメータにより、TIMESTAMPおよびTIMESTAMP WITH LOCAL TIME ZONEデータ型のデフォルトの日付書式が定義されます。これにはTO_CHARおよびTO_TIMESTAMP_TZファンクションが使用されます。NLS_TERRITORYパラメータでは、NLS_TIMESTAMP_TZ_FORMATパラメータのデフォルト値が決定されます。NLS_TIMESTAMP_TZ_FORMATの値は、有効な任意の日付時間書式モデルです。

書式の値は引用符で囲む必要があります。次に例を示します。

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

NLS_TIMESTAMP_TZを設定し、使用するには、次の手順を実行します。

次の例では、NLS_TIMESTAMP_TZ_FORMAT値が設定されます。また、TO_TIMESTAMP_TZファンクションを使用し、SELECT文で明示的に設定した書式を表しています。

  1. SQL Developerで、Oracle Databaseがインストールされた現行の日付書式を記録します。

    「Connections」で、まず「Data Dictionary Reports」、次に「About Your Database」、そして「National Language Support Parameters」を展開します。「Select Connection」ダイアログ・ボックスで、接続のリストからhr_connを選択します。現行の日付書式はNLS_TIMESTAMP_TZ_FORMATの後にリストされます。

  2. NLS_TIMESTAMP_TZ_FORMATを設定します。

    ALTER SESSION SET NLS_TIMESTAMP_TZ_FORMAT = 'YYYY-MM-DD HH:MI:SS.FF TZH:TZM';
    
    
  3. 手順1に示された元の設定に戻すNLS_TIMESTAMP_TZ_FORMATを設定します。次に例を示します。

    ALTER SESSION SET NLS_TIMESTAMP_TZ_FORMAT='DD-MON-RR HH.MI.SSXFF AM TZR';
    

    参照:

    • NLS_TIMESTAMP_TZ_FORMATパラメータの詳細は、『Oracle Databaseリファレンス』を参照してください。

    • 「日付書式の使用」

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

    • 日時データ型およびタイムゾーン・サポートの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

     

カレンダ定義の設定

この項では、カレンダ定義について説明します。

参照:

  • サポートされるカレンダを含むロケール情報の詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

 

カレンダ書式の概要

次のカレンダ情報は地域別に格納されます。

NLS_CALENDARパラメータの使用

世界中で様々な暦法が使用されています。NLS_CALENDARによって、Oracle Databaseで使用する暦法が指定されます。デフォルト値はGregorianです。値は有効な任意のカレンダ書式名です。

NLS_CALENDARパラメータには、次の値のいずれかを指定できます。

NLS_CALENDARパラメータを設定するには、次の手順を実行します。

次の例では、NLS_CALENDARの値をEnglish Hijrahに設定しています。イスラム暦1424年のラマダンの最初の日の値が表示されています。他のNLSパラメータにはSQL Developerのデフォルト設定が反映されます。

  1. SQL Developerで、Oracle Databaseがインストールされた現行のカレンダ書式を記録します。

    「Connections」で、まず「Data Dictionary Reports」、次に「About Your Database」、そして「National Language Support Parameters」を展開します。「Select Connection」ダイアログ・ボックスで、接続のリストからhr_connを選択します。現行の日付書式はNLS_DATE_FORMATの後に、現行の地域はNLS_CALENDARの後にリストされます。

  2. NLS_CALENDARをEnglish Hijrahに設定するには、次の手順を実行します。

    ALTER SESSION SET NLS_CALENDAR='English Hijrah';
    
    
  3. イスラム暦1424年(グレゴリオ暦では2007年)のラマダンの最初の日が表示されます。

    SELECT TO_DATE('01-Ramadan-1428') FROM DUAL;
    
    

    この例では次のように出力されます。

    TO_DATE('01-RAMADAN-1428') 
    ------------------------- 
    13 September 2007
    
    
  4. 手順1に示された元の設定に戻すNLS_CALENDARを設定します。次に例を示します。

    ALTER SESSION SET NLS_CALENDAR='GREGORIAN';
    

    参照:

    • NLS_CALENDAR パラメータの詳細は、『Oracle Databaseリファレンス』を参照してください。

    • 「カレンダ書式の概要」

    • サポートされるカレンダを含むロケール情報の詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

     

数値書式の使用

データベースでは、数字列を正確に解釈するために、各セッションで使用される数値書式設定の規則を認識している必要があります。たとえば、数値の入力時に小数点文字としてピリオドまたはカンマのどちらを使用するか(234.00または234,00)などを認識している必要があります。同じように、アプリケーションでは、数値情報をクライアント側の書式で表示できる必要があります。

次の表に数値書式の例を示します。

  数値書式 

エストニア 

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パラメータで上書きできます。

参照:

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

 

NLS_NUMERIC_CHARACTERSパラメータの使用

NLS_NUMERIC_CHARACTERSにより、グループ・セパレータおよび小数点記号が指定されます。グループ・セパレータとは、千や100万などを示すために整数グループを区切る文字です。この文字はG数値書式モデルで戻されます。小数点記号は、数値の整数部と小数部を区切ります。NLS_NUMERIC_CHARACTERSを設定すると、NLS_TERRITORYの設定から導出されるデフォルト値が上書きされます。値は、グループ・セパレータおよび小数点記号に指定できる2つの任意の数字です。

任意の文字を小数点文字またはグループ・セパレータに指定できます。2つの文字はシングルバイトであり、お互いに異なる文字である必要があります。これらの文字に、数字、プラス記号(+)、マイナス記号(-)、小なり記号(<)、大なり記号(>)を使用することはできません。どちらかの文字を空白にすることができます。

小数点文字としてカンマを設定し、グループ・セパレータとしてピリオドを設定するには、NLS_NUMERIC_CHARACTERSパラメータを次のように指定します。

ALTER SESSION SET NLS_NUMERIC_CHARACTERS = ",.";

SQL文には、数値リテラルまたはテキスト・リテラルを表す数値を含むことができます。数値リテラルは引用符で囲みません。数値リテラルはSQL言語構文の一部で、小数点文字として常にドットを使用し、グループ・セパレータは含まれません。テキスト・リテラルは引用符で囲みます。テキスト・リテラルは、必要に応じて、現行のNLS設定に従って、暗黙的または明示的に数値に変換されます。

NLS_NUMERIC_CHARACTERSパラメータを設定するには、次の手順を実行します。

次の例では、ALTER SESSION文で指定された小数点文字とグループ・セパレータを使用して数値4000の書式を設定しています。

  1. SQL Developerで、Oracle Databaseがインストールされた現行の数値書式を記録します。

    「Connections」で、まず「Data Dictionary Reports」、次に「About Your Database」、そして「National Language Support Parameters」を展開します。「Select Connection」ダイアログ・ボックスで、接続のリストからhr_connを選択します。現行の数値書式はNLS_NUMERIC_CHARACTERSの後にリストされます。

  2. NLS_NUMERIC_CHARACTERSを指定したグループ・セパレータおよび小数点文字に設定します。

    ALTER SESSION SET NLS_NUMERIC_CHARACTERS = ",.";
    
    

    二重引用符を使用します。

  3. 書式マスク'9G999D99'を使用して4000を表示します。

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

    この例では次のように出力されます。グループ・セパレータはピリオド(.)で、小数点文字はカンマ(,)です。

    TO_CHAR(4000,'9G999D99') 
    ------------------------ 
     4.000,00
    
    
  4. 手順1に示された元の設定に戻すNLS_NUMERIC_CHARACTERSを設定します。次に例を示します。

    ALTER SESSION SET NLS_NUMERIC_CHARACTERS=". ";
    

    参照:

    • NLS_NUMERIC_CHARACTERSパラメータの詳細は、『Oracle Databaseリファレンス』を参照してください。

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

     

通貨パラメータの使用

基数記号と3桁区切りは、ロケールで定義できます。たとえば、小数点は、米国ではピリオド(.)ですが、フランスではカンマ(,)です。金額$1,234の持つ意味は国によって異なるため、金額をロケールごとに適切に表示することが重要です。

参照:

  • 通貨パラメータを含むグローバリゼーション・サポート環境の設定の詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

 

通貨書式の概要

世界中で様々な通貨書式が使用されています。標準的な書式の一部を次の表に示します。

  通貨書式 

エストニア 

1 234,56 kr 

ドイツ 

1.234,56€

中国 

¥1,234.56 

英国 

£1,234.56 

米国 

$1,234.56 

参照:

 

NLS_CURRENCYパラメータの使用

NLS_CURRENCYパラメータでは、L数値書式モデルで戻される文字列の各国通貨記号を指定します。NLS_CURRENCYを設定すると、NLS_TERRITORYで暗黙的に定義された設定が上書きされます。値には、有効な任意の通貨記号を指定できます。

変更中のNLS_CURRENCY値の結果を表示するには、次の手順を実行します。

次の例では、NLS_CURRENCY値によって置換されるL数値書式モデルを含む書式を使用して給与合計を表示しています。

  1. 11000より大きい値の給与が表示されます。

    SELECT TO_CHAR(salary, 'L099G999D99') "salary" FROM employees 
      WHERE salary > 11000
    
    

    この例では次のように出力されます。この場合、ドル記号($)がL数値書式モデルです。

    salary                
    --------------------- 
              $024,000.00 
              $017,000.00 
              $017,000.00 
              $012,000.00 
              $014,000.00 
              $013,500.00 
              $012,000.00 
              $011,500.00 
              $013,000.00 
              $012,000.00
    
    10 rows selected
    

    参照:

     

NLS_ISO_CURRENCYパラメータの使用

NLS_ISO_CURRENCYパラメータでは、C数値書式モデルで戻される文字列の各国通貨記号を指定します。NLS_ISO_CURRENCYを設定すると、NLS_TERRITORYで暗黙的に定義された値が上書きされます。値には、有効な任意の文字列を指定できます。

各国通貨記号は不明確な場合があります。たとえば、ドル記号($)は米国ドルを指すこともオーストラリア・ドルを指すこともあります。ISO仕様には、特定の地域または国に対して固有の通貨記号が定義されています。たとえば、米国ドルに対するISO通貨記号はUSDです。オーストラリア・ドルに対するISO通貨記号はAUDです。

NLS_ISO_CURRENCYパラメータの構文はNLS_TERRITORYパラメータの構文と同じで、サポート対象地域すべてが有効値です。

NLS_ISO_CURRENCYパラメータを設定するには、次の手順を実行します。

次の例では、適切な書式モデルを使用してフランス用のISO通貨記号および給与書式を設定しています。

  1. SQL Developerで、Oracle DatabaseがインストールされたISO通貨を記録します。

    「Connections」で、まず「Data Dictionary Reports」、次に「About Your Database」、そして「National Language Support Parameters」を展開します。「Select Connection」ダイアログ・ボックスで、接続のリストからhr_connを選択します。現行のISO通貨書式はNLS_ISO_CURRENCYの後にリストされます。

  2. NLS_ISO_CURRENCYをフランスに設定します。

    ALTER SESSION SET NLS_ISO_CURRENCY=FRANCE;
    
    
  3. 書式を使用して選択した給与を表示します。

    SELECT TO_CHAR(salary, 'C099G999D99') "Salary" FROM employees
      WHERE department_id = 60;
    
    

    この例では次のように出力されます。

    Salary             
    ------------------ 
         EUR009,000.00 
         EUR006,000.00 
         EUR004,800.00 
         EUR004,800.00 
         EUR004,200.00
    
    5 rows selected
    
    
  4. 手順1に示された元の設定に戻すNLS_ISO_CURRENCYを設定します。次に例を示します。

    ALTER SESSION SET NLS_ISO_CURRENCY=AMERICA;
    

    参照:

     

NLS_DUAL_CURRENCYパラメータの使用

NLS_DUAL_CURRENCYを使用すると、NLS_TERRITORYで暗黙的に定義されたデフォルトの二重通貨記号が上書きされます。値には有効な任意の記号を指定できます。

NLS_DUAL_CURRENCYはユーロ移行期間中にユーロ通貨記号をサポートするために導入されました。

参照:

 

言語ソートおよび検索の使用

ソート順序は言語によって異なります。ある言語ではアルファベットの文字の並びに応じてソートされ、ある言語では文字の画数でソートされ、またある言語では語の発音によってソートされます。また、文字のアクセントの扱いも言語によって異なります。たとえば、デンマーク語の文字Æは、Zの後に来ます。また、YとÜは同じ文字の変形とみなされます。

言語ソート・パラメータを使用することで、データのソート方法を定義できます。基本的な言語定義では、文字列を独立した文字の連続として扱います。

参照:

  • 言語ソートおよび文字列検索の詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

 

NLS_SORTパラメータの使用

NLS_SORTパラメータにより、ORDER BY問合せの照合順序(言語ソート)が指定されます。これにより、NLS_LANGUAGEパラメータから導出されたデフォルトのNLS_SORT値は上書きされます。NLS_SORTの値はBINARY、または有効な任意の言語ソート名です。

NLS_SORT = BINARY | sort_name

値がBINARYである場合、照合順序は基礎となるコード体系の数値コードに基づきます。データ型に応じて、これはデータベース・キャラクタ・セットまたは各国語キャラクタ・セットのバイナリ・ソート順序のいずれかです。値が言語ソートの名前である場合、ソートは定義したソートの順序に基づきます。NLS_LANGUAGEパラメータによってサポートされるほとんどの(すべてではありません)言語は同じ名前の言語ソートをサポートします。

NLS_SORTパラメータを設定するには、次の手順を実行します。

NLS_SORTパラメータ値を変更し、その結果を問合せの結果の表示で確認できます。次の例ではNLS_SORTを最初にバイナリに設定して、次にスペイン語(SPANISH_M)に設定した結果を示しています。スペインでは伝統的にch、ll、ñを独自の文字として扱い、それぞれc、l、nの次に来ます。

  1. SQL Developerで、Oracle Databaseがインストールされた現行の照合書式を記録します。

    「Connections」で、まず「Data Dictionary Reports」、次に「About Your Database」、そして「National Language Support Parameters」を展開します。「Select Connection」ダイアログ・ボックスで、接続のリストからhr_connを選択します。現行の照合書式はNLS_SORTの後にリストされます。

  2. NLS_SORTをバイナリに設定します。

    ALTER SESSION SET NLS_SORT=BINARY;
    
    
  3. ORDER BY句のあるSELECT文を入力し、変更後の出力を確認します。

    SELECT last_name FROM employees
      WHERE last_name LIKE 'C%' 
      ORDER BY last_name;
    
    

    この例では次のように出力されます。

    LAST_NAME                 
    ------------------------- 
    Cabrio                    
    Cambrault                 
    Cambrault                 
    Chen                      
    Chung                     
    Colmenares
    
    6 rows selected
    
    
  4. NLS_SORTSPANISH_Mに設定します。

    ALTER SESSION SET NLS_SORT=spanish_m;
    
    
  5. 同様のSELECT文を入力し、変更後の出力を確認します。

    SELECT last_name FROM employees 
      WHERE last_name LIKE 'C%' 
      ORDER BY last_name;
    
    

    この例では次のように出力されます。Colmenaresは現在Chenの前に来ます。

    LAST_NAME                 
    ------------------------- 
    Cabrio                    
    Cambrault                 
    Cambrault                 
    Colmenares                
    Chen                      
    Chung
    
    6 rows selected
    
    
  6. 手順1に示された元の設定に戻すNLS_SORTを設定します。次に例を示します。

    ALTER SESSION SET NLS_SORT=BINARY;
    

    参照:

     

NLS_COMPパラメータの使用

比較演算子を使用するとき、文字は指定したコード体系のバイナリ・コードにより、比較されます。バイナリ・コードより高い場合、文字は他よりも大きくなります。バイナリでの言語順序は特定の言語の言語順序と一致しない場合があるため、このような比較が言語的に正確ではない可能性があります。

NLS_COMPパラメータの値はSQL操作の比較動作に影響します。値にはBINARY(デフォルト)またはLINGUISTICを指定できます。バイナリ比較ではなく言語比較を実行する場合は、NLS_COMPパラメータを使用することで、SQL文のNLSSORTファンクションを使用する面倒な処理を回避できます。NLS_COMPLINGUISTICに設定すると、SQLによりNLS_SORTパラメータの値に基づいた言語比較が実行されます。

NLS_COMPパラメータを設定するには、次の手順を実行します。

NLS_COMPパラメータ値を変更し、その結果を問合せ結果を表示することで確認できます。次の例では、従業員名に対しバイナリ比較を実行した後にスペイン語の言語比較を実行したことを示しています。

  1. SQL Developerで、Oracle Databaseがインストールされた現行の比較演算子書式を記録します。

    「Connections」で、まず「Data Dictionary Reports」、次に「About Your Database」、そして「National Language Support Parameters」を展開します。「Select Connection」ダイアログ・ボックスで、接続のリストからhr_connを選択します。現行の比較演算子書式はNLS_COMPの後にリストされます。

  2. NLS_SORTをスペイン語に設定し、NLS_COMPBINARYに設定します。

    ALTER SESSION SET NLS_SORT=spanish_m NLS_COMP=binary;
    
    
  3. 姓がCで始まる従業員を戻すSELECT文を入力します。

    SELECT last_name FROM employees 
      WHERE last_name LIKE 'C%';
    
    

    この例では次のように出力されます。

    LAST_NAME                 
    ------------------------- 
    Cabrio                    
    Cambrault                 
    Cambrault                 
    Chen                      
    Chung                     
    Colmenares                
     
    6 rows selected
    
    
  4. NLS_COMPLINGUISTICに設定します。

    ALTER SESSION SET NLS_COMP=linguistic;
    
    
  5. 同様のSELECT文を入力し、変更後の出力を確認します。

    SELECT last_name FROM employees 
      WHERE last_name LIKE 'C%';
    
    

    この例では次のように出力されます。2つの行、ChenおよびChungは戻されません。これは、スペイン語ではchcの後に続く別の文字として扱われ、chは、スペイン語の言語比較が実行されたときに除外されるためです。

    LAST_NAME                 
    ------------------------- 
    Cabrio                    
    Cambrault                 
    Cambrault                 
    Colmenares                
     
    4 rows selected
    
    
  6. 手順1に示された元の設定に戻すNLS_COMPを設定します。次に例を示します。

    ALTER SESSION SET NLS_COMP=BINARY;
    

    参照:

     

大/小文字およびアクセントを区別しない検索の使用

データベースの操作では、大/小文字および文字のアクセントが区別されます。場合によっては、大/小文字を区別しない、またはアクセントを区別しない比較を実行する必要があります。大/小文字を区別しない、またはアクセントを区別しないソートを指定するには、NLS_SORTセッション・パラメータを使用します。

大/小文字を区別しない、またはアクセントを区別しないソートを指定するには、次の手順を実行します。

長さセマンティクスの使用

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

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

次の式ではバイト・セマンティクスが使用されています。VARCHAR2式のBYTE修飾子およびSQLファンクション名のB接尾辞に注意してください。

次の式ではキャラクタ・セマンティクスが使用されています。VARCHAR2式のCHAR修飾子に注意してください。

NLS_LENGTH_SEMANTICSパラメータの使用

NLS_LENGTH_SEMANTICSパラメータによって、BYTE(デフォルト)またはCHARセマンティクスが指定されます。デフォルトでは、文字データ型CHARおよびVARCHAR2が、文字単位ではなくバイト単位で指定されます。このため、表定義でCHAR(20)と指定すると、文字データを格納するために20バイトが割り当てられます。

NLS_LENGTH_SEMANTICSによって、CHARVARCHAR2およびLONGの各列をバイト・セマンティクスまたはキャラクタ・セマンティクスのいずれかを使用して作成できます。NCHARNVARCHAR2CLOBおよびNCLOBの各列は、常に文字ベースです。既存の列は影響を受けません。

NLS_LENGTH_SEMANTICSパラメータを設定するには、次の手順を実行します。
  1. SQL Developerで、Oracle Databaseがインストールされた現行のセマンティクス書式を記録します。

    「Connections」で、まず「Data Dictionary Reports」、次に「About Your Database」、そして「National Language Support Parameters」を展開します。「Select Connection」ダイアログ・ボックスで、接続のリストからhr_connを選択します。現行のセマンティクス書式はNLS_LENGTH_SEMANTICSの後にリストされます。

  2. NLS_LENGTH_SEMANTICSBYTEに設定します。

    ALTER SESSION SET NLS_LENGTH_SEMANTICS=BYTE;
    
    
  3. 次のように表を作成します。

    CREATE TABLE SEMANTICS_BYTE(SOME_DATA VARCHAR2(20));
    
    
  4. SEMANTICS_BYTEのデータ型をチェックします。

    「Connections」タブを選択しhr_conn接続を展開して、「Tables」にすべての表を表示します。SEMANTICS_BYTE表を選択します。SOME_DATA列のデータ型は、VARCHAR2(20 BYTE)としてリストされます。

  5. NLS_LENGTH_SEMANTICSCHARに設定します。

    ALTER SESSION SET NLS_LENGTH_SEMANTICS=CHAR;
    
    
  6. 次のように表を作成します。

    CREATE TABLE SEMANTICS_CHAR(SOME_DATA VARCHAR2(20));
    
    
  7. SEMANTICS_CHARのデータ型をチェックします。

    「Connections」タブを選択しhr_conn接続を展開して、「Tables」にすべての表を表示します。SEMANTICS_CHAR表を選択します。SOME_DATA列のデータ型は、VARCHAR2(20 CHAR)としてリストされます。

  8. SEMANTICS_BYTEおよびSEMANTICS_CHAR表を削除します。

    「Tables」ナビゲーション階層で、各表の名称を右クリックして、メニューから「Table」を選択してから「Drop」を選択します。「Apply」をクリックしてから「Confirmation」ダイアログ・ボックスで「OK」をクリックします。

  9. 手順1に示された元の設定に戻すNLS_LENGTH_SEMANTICSを設定します。次に例を示します。

    ALTER SESSION SET NLS_LENGTH_SEMANTICS=BYTE;
    

    参照:

    • NLS_LENGTH_SEMANTICSパラメータの詳細は、『Oracle Databaseリファレンス』を参照してください。

    • 長さセマンティクスを含むキャラクタ・セットの選択または変更の詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

     

グローバルなアプリケーション開発

この項では、複数の言語アプリケーション用にデプロイできるSQLおよびPL/SQLのUnicode関連の機能を説明します。Unicodeデータは挿入および取得できます。データはデータベースおよびクライアント間で透過的に変換され、クライアント・プログラムがデータベース・キャラクタ・セットおよび各国キャラクタ・セットから独立していることを保証します。

参照:

  • Unicodeを使用したプログラミングの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

 

Unicodeの概要

Unicodeとはエンコードされたユニバーサル・キャラクタ・セットです。このセットを使用すると、1つのキャラクタ・セットを使用して任意の言語の情報を格納できます。Unicodeには、プラットフォーム、プログラムまたは言語に関係なく、すべての文字に対する一意のコード値が用意されています。

Unicodeには次のような利点があります。

Unicode文字は、Oracleデータベースにおいて次の2つの方法で格納できます。

SQL文字データ型の使用

SQL NCHARデータ型にはNCHARおよびNVARCHAR2という2つのデータ型があります。

SQL Developerでは、各列のタイプに適切な値を選択することにより、表を作成または編集するダイアログ・ボックスでこれらのデータ型を指定できます。また、「SQL Worksheet」を使用し、CREATE TABLE文を入力することで、各列名およびデータ型を指定できます。

参照:

 

NCHARデータ型の使用

NCHARデータ型として表の列またはPL/SQL変数を定義するとき、長さは文字数として指定されます。たとえば、次の文により最大文字長が30の列が1つ作成されます。

CREATE TABLE table1 (column1 NCHAR(30));

列の最大バイト数は、最大文字数と各文字の最大バイト数の積です。

たとえば、各国語キャラクタ・セットがUTF8の場合、最大バイト長は30文字に1文字当たり3バイトを乗算した値、つまり90バイトとなります。

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

使用可能な最大列サイズは、各国語キャラクタ・セットがUTF8の場合は2000文字、AL16UTF16の場合は1000文字です。実際のデータが最大バイト制限の2000の対象となります。2つのサイズ制限は同時に満たす必要があります。PL/SQLでは、NCHARデータの最大長は32767バイトです。NCHAR変数は32767文字まで定義できますが、実際のデータは32767バイトを超えることはできません。列の長さより短い値を挿入すると、最大文字長と最大バイト長のいずれか小さい方の値まで空白で埋められます。

参照:

  • 「NVARCHAR2データ型の使用」

  • Unicodeを使用したプログラミングの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

 

NVARCHAR2データ型の使用

NVARCHAR2データ型は、各国語キャラクタ・セットを使用する可変長文字列を指定します。NVARCHAR2列を使用して表を作成するときは、列の最大文字数を指定します。NVARCHAR2の長さは、NCHARの場合と同様に文字単位です。Oracle Databaseでは値が列の最大長を超えないかぎり、ユーザーが指定したとおりに各値が列内に格納されます。文字列の値が最大長まで埋め込まれることはありません。

使用可能な最大列サイズは、各国語キャラクタ・セットが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));

参照:

  • 「NCHARデータ型の使用」

  • Unicodeを使用したプログラミングの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

 

Unicode文字列リテラルの使用

Unicode文字列リテラルは、次の方法でSQLおよびPL/SQLに入力できます。

最後の2つの方法を使用すると、すべてのUnicode文字列リテラルをエンコードできます。

参照:

 

NCHARリテラルの置換

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

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

互換性のないデータベース・キャラクタ・セットへの変換時のデータ消失を回避するために、クライアント環境変数ORA_NCHAR_LITERAL_REPLACETRUEに設定してNCHARリテラル置換を使用できます。これによりクライアント側のNリテラルを、文の実行時にUnicodeにデコードされる内部書式で置換できるようになります。デフォルトでは、下位互換性を維持するためにNCHARリテラル置換は無効です。

参照:

 

NLSパラメータを使用したロケール依存の機能の使用

動作をグローバリゼーション・サポートの規則に依存しているすべてのSQLファンクションで、NLSパラメータを指定できます。これらのファンクションは、TO_CHARTO_DATETO_NUMBERNLS_UPPERNLS_LOWERNLS_INITCAPおよびNLSSORTです。

これらのファンクションのNLSパラメータを指定すると、セッションのNLSパラメータに依存せずにファンクションを評価できます。この機能は、数字や日付が文字列リテラルとして含まれているSQL文で重要となる場合があります。

たとえば、日付に対する言語がAMERICANであることを評価するには、次の2つの問合せがあります。

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

すべての文字ファンクションは、シングルバイトとマルチバイトの両方の文字をサポートします。単位を明示的に示した場合を除いて、文字ファンクションはバイト単位ではなく文字単位で動作します。

SQLファンクションでビューやトリガーが評価される場合、NLSファンクションパラメータには現行のセッションからのデフォルト値が使用されます。SQLファンクションでCHECK制約が評価される場合は、データベースの作成時にNLSパラメータに指定されたデフォルト値が使用されます。

参照:

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

 

SQLファンクションのNLSパラメータの指定

NLSパラメータはSQLファンクションでパラメータ = 値のように指定します。次に例を示します。

'NLS_DATE_LANGUAGE = AMERICAN'

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

NLS_DATE_LANGUAGE
NLS_NUMERIC_CHARACTERS
NLS_CURRENCY
NLS_ISO_CURRENCY
NLS_DUAL_CURRENCY
NLS_CALENDAR
NLS_SORT

一部の言語では、1つの小文字が複数の大文字に対応したり、1つの大文字が複数の小文字に対応します。したがって、NLS_UPPERNLS_LOWERおよびNLS_INITCAPファンクションの出力の長さは入力の長さと異なることがあります。次の表で、特定のSQLファンクションに対し、どのNLSパラメータが有効であるかを示します。

SQLファンクション  有効なNLSパラメータ 
TO_DATE
 
NLS_DATE_LANGUAGE, NLS_CALENDAR
 
TO_NUMBER
 
NLS_NUMERIC_CHARACTERS, NLS_CURRENCY, NLS_ISO_CURRENCY,
NLS_DUAL_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
 

例6-1は、SQLファンクションでNLSパラメータを使用する方法を示すSELECT文を示しています。これらのSELECT文を実行した後(SQLワークショップでグループとして実行可能)、「Script Output」ペインにおける各文の出力を確認します(多くの文の出力は非常に長いです)。

例6-1    SQLファンクションでのNLSパラメータの使用

SELECT TO_DATE('1-JAN-99', 'DD-MON-YY', 
   'NLS_DATE_LANGUAGE = American') "01/01/99" FROM DUAL;
 
SELECT TO_CHAR(hire_date, 'DD/MON/YYYY',
   'NLS_DATE_LANGUAGE = French') "Hire Date" FROM employees;
 
SELECT TO_CHAR(SYSDATE, 'DD/MON/YYYY', 
   'NLS_DATE_LANGUAGE = ''Traditional Chinese'' ') "System Date" FROM DUAL;
 
SELECT TO_CHAR(13000, '99G999D99', 
  'NLS_NUMERIC_CHARACTERS = '',.''') "13K" FROM DUAL;
 
SELECT TO_CHAR(salary, '99G999D99L', 'NLS_NUMERIC_CHARACTERS = '',.''
   NLS_CURRENCY = ''EUR''') salary FROM employees;
 
SELECT TO_CHAR(salary, '99G999D99C', 'NLS_NUMERIC_CHARACTERS = ''.,''
   NLS_ISO_CURRENCY = Japan') salary FROM employees;
 
SELECT NLS_UPPER(last_name, 'NLS_SORT = Swiss') "Last Name" FROM employees;
 
SELECT last_name FROM employees 
   ORDER BY NLSSORT(last_name, 'NLS_SORT = German');

参照:

 

SQLファンクションで受け入れられないNLSパラメータ

NLSパラメータNLS_LANGUAGENLS_TERRITORYおよびNLS_DATE_FORMATNLSSORT以外のSQLファンクションでは使用できません。

NLS_LANGUAGEは、NLS_DATE_LANGUAGEのセッションの値を妨げます。たとえばTO_CHARファンクションでNLS_LANGUAGEを指定すると、そのセッションのNLS_DATE_LANGUAGEパラメータ値と異なる場合は、Oracle Databaseから無視されます。

NLS_DATE_FORMATパラメータおよびNLS_TERRITORY_FORMATパラメータは必要な書式モデルを妨げる可能性があるので、パラメータとしては受け入れられません。TO_CHARファンクションまたはTO_DATEファンクションでNLSパラメータを使用する場合は、日付書式を指定する必要があります。したがってNLS_DATE_FORMATパラメータおよびNLS_TERRITORY_FORMATパラメータはこれらの変換ファンクションには有効ではありません。TO_CHARファンクションまたはTO_DATEファンクションでNLS_DATE_FORMATまたはNLS_TERRITORY_FORMATを指定すると、Oracle Databaseはエラーを返します。

参照:

 


戻る 次へ
Oracle
Copyright © 2005, 2008, Oracle Corporation.

All Rights Reserved.
目次
目次
索引
索引