プライマリ・コンテンツに移動
Oracle® Database Oracleプリコンパイラのためのプログラマーズ・ガイド
12c リリース1 (12.1)
B71398-03
目次へ移動
目次
索引へ移動
索引

前
次

マルチバイトのグローバリゼーション・サポート・キャラクタ・セット

Pro*COBOLプリコンパイラでは、次の機能により、マルチバイトのグローバリゼーション・サポート・キャラクタ・セットのサポートが拡張されています。

Oracleでは、プリコンパイラのランタイム・ライブラリSQLLIBにより、マルチバイト文字列がサポートされています。

埋込みSQL内の文字列

埋込みSQL文内のマルチバイトのグローバリゼーション・サポート文字列は、文字列をマルチバイト文字列として識別する文字リテラルと、その後に続く一重引用符で囲まれた文字列で構成されます。

たとえば、次のような埋込みSQL文があるとします。

EXEC SQL
 SELECT empno INTO :emp_num FROM emp
 WHERE ename=N'Kuroda'
 END-EXEC.

この文では、'Kuroda'という文字列の前に付いているN文字リテラルにより、この文字列がマルチバイト文字列であると認識されるため、マルチバイト文字の文字列が含まれていることがわかります。

動的SQL

動的SQL文はプリコンパイル時には処理されず、Oracleではマルチバイトのグローバリゼーション・サポート文字列自体は処理されないため、動的SQL文にはグローバリゼーション・サポートのマルチバイト文字列を埋め込むことはできません。

埋込みDDL

グローバリゼーション・サポートのマルチバイト・データを格納する列は、埋込みのデータ定義言語(DDL)文では使用できません。この制限はプリコンパイル時には適用されないため、NCHARなどの拡張された列型を埋込みDDL文で使用すると、プリコンパイル・エラーではなく実行エラーになります。

マルチバイト・グローバリゼーション・サポート・ホスト変数

Pro*COBOLプリコンパイラでは、ANSI規格PIC N句を使用して、マルチバイト文字データのホスト変数を宣言します。PIC N句を使用して宣言された変数は、2バイト文字の文字列変数として認識されます。

  • Globalization Support_LOCAL

  • VARCHAR

これらのオプションの詳細は、Oracleプリコンパイラの実行を参照してください。

制限

表は使用できません。

PIC Nデータ型を使用して宣言されたホスト変数は、表に使用できません。

奇数バイト幅はありません。マルチバイトのグローバリゼーション・サポート文字の格納に、Oracle CHAR列を使用しないでください。奇数バイトのデータがシングルバイト列からマルチバイトのグローバリゼーション・サポート(PIC N)・ホスト変数にフェッチされると、ランタイム・エラーが発生します。

ホスト変数の同値化は行えません。マルチバイトのグローバリゼーション・サポート文字変数は、EXEC SQL VAR文を使用して同値化できません。

動的SQLは使用できません。Pro*COBOLでは、グローバリゼーション・サポートのマルチバイト文字に動的SQLを使用できません。

空白埋込み

Pro*COBOL文字変数をマルチバイトのグローバリゼーション・サポート変数として定義すると、その変数の外部データ型に応じて、次の空白埋込みおよび空白削除の規則が適用されます。『Pro*COBOLプログラマーズ・ガイド』の「外部データ型」を参照してください。

CHARF。これは、マルチバイト文字列が定義されるときのデフォルトの文字型です。入力データから、後続のダブルバイトの空白文字が削除されます。ただし、文字列がダブルバイト空白文字のみで構成されている場合は、インディケータとしてダブルバイトの空白文字が1つバッファに残されます。

出力ホスト変数では、ダブルバイトの空白文字で空白が埋め込まれます。

VARCHAR。入力時に、ホスト変数からは後続のダブルバイト空白文字が削除されません。lengthコンポーネントは、バイト単位ではなく文字単位のデータの長さとみなされます。

出力では、ホスト変数には空白は埋め込まれません。バッファの長さは、バイト単位ではなく文字単位のデータの長さに設定されます。

STRING/LONG VARCHAR。これらのホスト変数を指定するには動的SQLまたはデータ型の同値化を使用する必要がありますが、グローバリゼーション・サポート・データはそのどちらにも対応していないためです。

インジケータ変数

マルチバイトのグローバリゼーション・サポート文字変数でも、他の変数の場合と同様に、インディケータ変数を使用できますが、列の長さの値はバイト単位ではなく文字単位で表されます。使用可能な値の一覧は、インジケータ変数の使用についてを参照してください。