17.00 - 17.05 - CHARACTER VARYING / LONG VARCHAR / VARCHAR - 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 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ライブラリのワイド文字用ルーチンを使用することはできません。