17.00 - 17.05 - CHARACTER / CHAR - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQL外部ルーチン プログラミング

Product
Advanced SQL Engine
Teradata Database
Release Number
17.00
17.05
Published
2020年6月
Content Type
プログラミング リファレンス
Publication ID
B035-1147-170K-JPN
Language
日本語 (日本)

Cデータ型定義

typedef unsigned char CHARACTER;
typedef Latin_Text CHARACTER_LATIN;
typedef Kanjisjis_Text CHARACTER_KANJISJIS;
typedef Kanji1_Text CHARACTER_KANJI1;
typedef Unicode_Text CHARACTER_UNICODE;

使用方法

文字データ型は、Cの標準NULL終了文字列を使用して渡されます。そのため、C文字列はSQL文字列より1文字長くなります。

UDF入力パラメータ文字列の途中に2進ゼロの文字を使用するには、CHARデータ型を使用してください。途中に2進ゼロの文字を含む文字列をCコードで処理することは、固定長文字列のほうが簡単だからです。同じように、VARCHAR型結果文字列の途中に2進ゼロの文字があると文字列終了と解釈されてしまうため、UDF結果文字列の途中に2進ゼロの文字を使用するには、CHARデータ型を使用してください。

関数で固定長文字入力パラメータを定義している場合、入力文字列の文字数は、CREATE FUNCTION文で定義されている最大数と必ず一致します。この最大数より少ない文字数の文字列で関数を呼び出すと、入力文字列は関数に渡される前に右側が埋め込まれます。

埋め込みの必要な固定長文字データには、指定された文字セットの空白文字が埋め込みとして使用されます。

関数の結果型が固定長文字データの場合、結果引数はCREATE FUNCTION文で定義されている最大値に文字列終了NULL文字のための1を加算したサイズのデータ域へのポインタです。結果の文字列の文字数は、CREATE FUNCTION文で定義されている最大数と一致している必要があります。戻されるデータがこの最大数を下回る場合は、結果文字列に埋め込みを追加する必要があります。

文字セットがUNICODEなら、CHARACTER_UNICODEデータ型を使用します。文字セットがUNICODE以外の場合は、CHARACTERデータ型を使用できます。

次の例では、UDF定義でCHAR型、C関数宣言でCHARACTER_LATINを使用しています。

SQL関数定義 対応するC関数宣言
CREATE FUNCTION F1 (
 A CHAR(6) CHARACTER SET LATIN)
RETURNS CHAR CHARACTER SET LATIN
 ...;
void f1(CHARACTER_LATIN a[7],
     CHARACTER_LATIN *result,
   ... )
{  ... }

制限

Unicode文字列では、1文字について2バイトを使用します。文字列終了NULL文字も2バイトになります。Cライブラリのワイド文字(wchar_t)は4バイトなので、Unicode文字列の処理にCライブラリのワイド文字用ルーチンを使用することはできません。