プライマリ・コンテンツに移動
Pro*C/C++プログラマーズ・ガイド
12c リリース1(12.1)
B71397-03
目次へ移動
目次
索引へ移動
索引

前
次

NCHAR変数

3つの内部データベース・データ型に、各国語キャラクタ・セット・データを格納できます。この種のデータ型は、NCHAR、NCLOBおよびNVARCHAR2です(NCHAR VARYINGとも呼ばれます)。これらのデータ型を使用できるのは、リレーショナル列のみです。

CHARACTER SET [IS] NCHAR_CS

各国語キャラクタ・セット・データを保持するホスト変数を指定するには、文字変数宣言に句CHARACTER SET [IS] NCHAR_CSを挿入します。これで、その変数に各国語キャラクタ・セット・データを格納できます。トークンISは省略してもかまいません。NCHAR_CSは、各国語キャラクタ・セットの名前です。

次に例を示します。

char character set is nchar_cs *str = "<Japanese_string>";

この例で、<Japanese_string>は、変数NLS_NCHARで定義されたように、各国語キャラクタ・セットAL16UTF16にあるUnicode文字で構成されています。

また、コマンドラインにNLS_CHAR=strと入力し、アプリケーションのコードを変更しても、同じ操作を実行できます。

char *str = "<Japanese_string>"

Pro*C/C++では、このように宣言された変数は、環境変数NLS_NCHARで指定されたキャラクタ・セットとして処理されます。NCHAR変数のサイズは、通常のCの変数と同様にバイト数で指定されます。

データをstrに入れるには、次の簡単な問合せを使用します。

EXEC SQL
   SELECT ENAME INTO :str FROM EMP WHERE DEPT = n'<Japanese_string1>';

また、strを次のSELECT文で使用することもできます。

EXEC SQL 
   SELECT DEPT INTO :dept FROM DEPT_TAB WHERE ENAME = :str;

環境変数NLS_NCHAR

Pro*C/C++では、NLS_LOCAL=NOの場合に、データベース・サポートとともに各国語キャラクタ・セットがサポートされます。NLS_LOCAL=NOで、新規の環境変数NLS_NCHARが有効な各国語キャラクタ・セットに設定されていれば、データベース・サーバーでNCHARがサポートされます。『Oracle Databaseリファレンス』のNLS_NCHARに関する項を参照してください。

NLS_NCHARでは、各国語キャラクタ・セット・データ(NCHAR、NVARCHAR2、NCLOB)に使用するキャラクタ・セットを指定します。キャラクタ・セットを指定しない場合は、定義済、あるいはNLS_LANGで間接的に定義済のキャラクタ・セットが使用されます。

NLS_NCHARには、プリコンパイル時と実行時に、有効な各国語キャラクタ・セット(言語名ではなく、NLS_LANGで設定)を指定する必要があります。SQLLIBでは、最初のSQL文の実行時にランタイム・チェックが実行されます。プリコンパイル時と実行時のキャラクタ・セットが異なっていると、SQLLIBからエラー・コードが戻されます。

VAR文でのCONVBUFSZ句

EXEC SQL VAR文を使用すると、ホスト変数をOracleの外部データ型に同値化して、デフォルトの割当てを上書きできます。これはホスト変数の同値化と呼ばれます。

EXEC SQL VAR文には、オプション句CONVBUFSZ (<size>)を使用できます。Oracleランタイム・ライブラリ内で、指定したホスト変数をキャラクタ・セット間で変換するためのバッファのサイズ<size>をバイト単位で指定します。

新しい構文は、次のいずれかです。

EXEC SQL VAR host_variable IS datatype [CONVBUFSZ [IS] (size)] ;

または

EXEC SQL VAR host_variable [CONVBUFSZ [IS] (size)];

datatypeは次のとおりです。

type_name [ ( { length | precision, scale } ) ]

関連項目:

すべてのキーワード、例および変数の詳細は、VAR(Oracle埋込みSQLディレクティブ)を参照してください。

埋込みSQL内の文字列

埋込みSQL文中のマルチバイト文字列は、その文字列をマルチバイトとして識別する文字リテラルと、後続の文字列で構成されます。文字列は、通常の一重引用符(')で囲みます。

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

EXEC SQL SELECT empno INTO :emp_num FROM emp
    WHERE ename = N'<Japanese_string>';

このSQL文には、マルチバイト文字列が含まれています(<Japanese_string>は、実際には漢字の可能性があります)。つまり、文字列の直前に文字リテラルNが付いているため、これはマルチバイト文字列として識別されます。Oracleでは大/小文字が区別されないため、この例ではnとNのどちらを使用してもかまいません。

文字列の制限事項

マルチバイト文字列では、データ型の同値化(TYPEまたはVARコマンド)は使用できません。

動的SQL方法4は、Pro*C/C++のマルチバイト文字列ホスト変数には使用できません。

標識変数

標識変数は、マルチバイト・キャラクタ(NLS_CHARオプションで指定)であるホスト文字変数とともに使用できます。