CHARACTER VARYING / LONG VARCHAR / VARCHAR - Advanced SQL Engine - Teradata Database

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

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
17.00
Published
2020年6月
Language
日本語
Last Update
2021-03-30
dita:mapPath
ja-JP/qwr1571437338192.ditamap
dita:ditavalPath
ja-JP/qwr1571437338192.ditaval
dita:id
B035-1147
Product Category
Software
Teradata Vantage

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