各NLSパラメータについて

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

関連情報:

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

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

NLS_LANGパラメータは、サーバー・セッション(たとえばSQL文の処理)およびクライアント・アプリケーション(たとえばOracle Databaseツールでの書式表示)の両方で、パラメータNLS_LANGUAGEおよびNLS_TERRITORYのデフォルト値を設定します。また、NLS_LANGパラメータは、クライアント・アプリケーションで入力または表示される文字セットを設定します。

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

関連情報:

NLS_LANGUAGEパラメータについて

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

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

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

デフォルト値: 「ロケールとNLS_LANGパラメータについて」で説明されているように、NLS_LANGで設定します。

次のデフォルト値を設定します。

例7-1では、NLS_LANGUAGEをITALIANおよび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に設定した値に設定します。

関連情報:

NLS_TERRITORYパラメータについて

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

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

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

デフォルト値: 「ロケールとNLS_LANGパラメータについて」で説明されているように、NLS_LANGで設定します。

次のデフォルト値を設定します。

例7-2では、NLS_TERRITORYをJAPANおよび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の値に設定します。

関連情報:

NLS_DATE_FORMATパラメータについて

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

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

許容値:有効な任意の日付時間書式モデル。たとえば:

NLS_DATE_FORMAT='MM/DD/YYYY'

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

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

デフォルトの日付書式が、所定の地域の規則に対応していない場合があります。ローカライズされたフォーマットで日付を取得するには、DS(短い日付)フォーマットとDL(長い日付)フォーマットを使用できます。例7-3では、NLS_TERRITORYをAMERICAおよびFRANCEに設定した場合、デフォルトの日付フォーマット、短い日付フォーマットおよび長い日付書式にどのように影響するかを示します。例7-4では、NLS_DATE_FORMATの値を変更し、NLS_TERRITORYによって設定されたデフォルト値をオーバーライドします。

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

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

  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_LANGUAGEをFRENCHに設定する必要があります。)

  6. NLS_TERRITORYをステップ1の値に設定します。

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

  1. NLS_TERRITORYおよびNLS_DATE_FORMATの現在の値を確認します。

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

     ALTER SESSION SET NLS_TERRITORY=AMERICA;
    
  3. ステップ1でNLS_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_TERRITORYおよびNLS_DATE_FORMATを、ステップ1の値に設定します。

関連情報:

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_LANGUAGEをFRENCHおよびSWEDISHに設定した場合、表示されるシステム日付にどのように影響するかを示します。

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

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

  1. NLS_DATE_LANGUAGEの現在の値に注意してください。

  2. ステップ1のNLS_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での値に設定します。

関連情報:

NLS_TIMESTAMP_FORMATとNLS_TIMESTAMP_TZ_FORMATパラメータについて

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

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

許容値:有効な任意の日付時間書式モデル。たとえば:

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

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

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

関連情報:

NLS_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の値に設定します。

関連情報:

NLS_NUMERIC_CHARACTERSパラメータについて

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

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

許容値:次の文字を除く2つの異なるシングルバイト文字。

デフォルト値: NLS_TERRITORYパラメータについて」で説明されているように、NLS_TERRITORYによって設定されます。

SQL文では、次のいずれかで数字を表します。

例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の値を",."に変更します(10進文字はピリオド、グループ・セパレータはカンマ)。

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

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

    結果:

     Number
    
     ---------
     4,000.00
    
  6. NLS_NUMERIC_CHARACTERSをステップ1の値に設定します。

関連情報:

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_TERRITORYおよびNLS_CURRENCYの現在の値を確認します。
  2. ステップ1のNLS_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_TERRITORYおよびNLS_CURRENCYをステップ1の値に設定します。

関連情報:

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_TERRITORYおよびNLS_ISO_CURRENCYの現在の値を確認します。
  2. ステップ1のNLS_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_TERRITORYおよびNLS_ISO_CURRENCYをステップ1の値に設定します。

関連情報:

NLS_DUAL_CURRENCYパラメータについて

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

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

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

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

関連情報:

NLS_SORTパラメータについて

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

指定: ORDER BY句を持つ問合せの言語ソート順序(照合順序)

許容値:

デフォルト値: 「NLS_LANGUAGEパラメータについて」で説明されているように、NLS_LANGUAGEで設定します。

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

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

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

Oracle Databaseの操作では、大/小文字および文字のアクセントが区別されます。大/小文字を区別しないソートを実行するには、NLS_SORTパラメータの値に_CIを付加します(たとえば、BINARY_CIまたはGERMAN_CI)。大/小文字を区別しない、かつアクセントを区別しないソートを実行する場合、NLS_SORTパラメータの値に_AIを付加します(たとえば、BINARY_AIまたはFRENCH_M_AI)。

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

  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. ステップ3でNLS_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の値に設定します。

関連情報:

NLS_COMPパラメータについて

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

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

許容値:

デフォルト値: BINARY

例7-11では、問合せの結果がNLS_COMP設定に依存することを示します。

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

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

  1. NLS_SORTおよびNLS_COMPの現在の値を確認します。
  2. ステップ1のNLS_SORTとNLS_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. LINGUISTICの値をNLS_COMPに変更します。

     ALTER SESSION SET NLS_COMP=LINGUISTIC;
    
  5. ステップ3から問合せを繰り返して行います。

    結果:

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

    このとき、旧来のスペイン語ではchcの後続く単一の文字として扱うため、CenとChungが返されません。

  6. NLS_SORTとNLS_COMPをステップ1のときの値に設定します。

関連情報:

NLS_LENGTH_SEMANTICSパラメータについて

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

指定: 文字データ型CHAR、VARCHAR2および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で指定した値に設定します。

関連情報: