Cデータ型定義
typedef Latin_Text VARCHAR_LATIN; typedef Kanjisjis_Text VARCHAR_KANJISJIS; typedef Kanji1_Text VARCHAR_KANJI1; typedef Unicode_Text VARCHAR_UNICODE;
使用
文字データ型は、Cの標準NULL終了文字列を使用して渡されます。C文字列はSQL文字列より1文字長くなります。
UDF入力パラメータ文字列の途中に2進ゼロの文字を使用するには、VARCHARではなくCHARデータ型を使用してください。途中に2進ゼロの文字を含む文字列をCコードで処理することは、固定長文字列のほうが簡単だからです。同じように、VARCHAR型結果文字列の途中に2進ゼロの文字があると文字列終了と解釈されてしまうため、UDF結果文字列の途中に2進ゼロの文字を使用するには、CHARデータ型を使用してください。
関数の結果型が可変長文字型の場合、結果引数はCREATE FUNCTION文で定義されている最大値に文字列終了NULL文字のための1を加算したサイズのデータ域へのポインタです。関数コードでは、文字列の末尾に文字列終了NULL文字を使用することにより、結果の長さを正しく設定する必要があります。
LONG VARCHARの長さは、単一バイト文字の場合は64000文字、2バイト文字の場合は32000文字です。
次の例では、UDF定義とC関数宣言でVARCHAR型を使用しています。
SQL関数定義 | 対応するC関数宣言 |
---|---|
CREATE FUNCTION F1 ( A VARCHAR(30) ) RETURNS VARCHAR(12) ...; |
void f1( VARCHAR_LATIN *a, VARCHAR_LATIN *result, ... ) { ... } |
制限
Unicode文字列では、1文字について2バイトを使用します。文字列終了NULL文字も2バイトになります。Cライブラリのワイド文字(wchar_t)は4バイトなので、Unicode文字列の処理にCライブラリのワイド文字用ルーチンを使用することはできません。