void
FNC_GetStructuredAttributeInfo ( UDT_HANDLE udtHandle,
int attributePosition,
int bufSize,
attribute_info_t *attributeArray )
- UDT_HANDLE udtHandle
- 外部ルーチンへの入力パラメータであると定義されているSTRUCTURED型UDTへのハンドル。
- int attributePosition
- この呼び出しが属性の1つまたはすべての属性に関する情報を戻すかどうか。
- 値
- 0以上の場合、値は、この呼び出しが情報を戻すSTRUCTURED型UDTの属性の位置を示します。最初の属性の位置は0です。
- -1の場合、この呼び出しは、すべての属性に関する情報を戻します。
- int bufSize
- attributeArray引数に割り当てられたバイト単位のサイズ。
- attribute_info_t *attributeArray
- attributePositionで指定される、STRUCTURED型UDTの要求された属性(複数可)を記述する、1つ以上のattribute_info_t構造体の配列。
- attribute_info_t構造体は、sqltypes_td.hで以下のように定義されています。
typedef struct attribute_info_t
{
INTEGER attrIndex;
dtype_et data_type;
CHARACTER attribute_name[256];
SMALLINT udt_indicator;
CHARACTER udt_type_name[256];
INTEGER max_length;
FNC_LobLength_t lob_length;
SMALLINT total_interval_digits;
SMALLINT num_fractional_digits;
charset_et charset_code;
} attribute_info_t;
- 条件
- attrIndexは、STRUCTURED型の属性の位置を指定します。最初の属性の位置は0です。
- data_typeは、属性のデータ型を指定します。sqltypes_td.hヘッダー ファイルは、dtype_etを以下のように定義しています。
typedef int dtype_et;
有効な値は、sqltypes_td.hのdtype_en列挙定数で以下のように定義されています。有効な値の一覧は、FNC_CallSPのdtype[]引数を参照してください。
- attribute_nameは、属性名を指定します。
列名により定義される属性があり、AS句がない動的UDTの場合、属性名は列名です。
- udt_indicatorは、属性がUDTであるかどうか、およびその場合にはどの種類かを指定します。
- 0はUDTでないことを意味します。
- 1はSTRUCTURED型UDTであることを意味します。
- 2はDISTINCT型UDTであることを意味します。
- 3はTeradata独自の内部UDTであることを意味します。
- 5はJSON属性であることを意味します。
- udt_type_nameは、属性に関連付けられたUDT型名を指定します。
これは属性がUDTである場合にのみ有意です。
- max_lengthは属性の値のバイト単位の最大長を指定します。
属性がLOB以外の型である場合、STRUCTURED型属性の値を取得するためにFNC_GetStructuredAttributeを呼び出す前に、割り当てる必要があるバッファのバイト単位のサイズとして、max_lengthを使用できます。
属性がLOBの場合、max_lengthはLOB_REFの長さを示します。lob_lengthメンバーは、LOBデータ自体の長さを提供します。
JSON属性の場合、max_lengthはJSON属性の可能な最大長を示します。
- lob_lengthは、LOB属性の長さを指定します。
これは属性がLOBである場合にのみ有意です。
JSON属性では、データがLOBとして保存される場合、lob_lengthはJSON属性の可能な最大長を指定し、それ以外の場合、この値は0です。
LOB属性の読み取りコンテキストを確立するときにFNC_LobOpenに渡すLOBオブジェクトの長さとして、lob_lengthを使用できます。
- total_interval_digitsは、特定の属性の精度を指定します。total_interval_digitsの値は、以下の型のn値と対応します。
- DECIMAL(n, m)
- INTERVAL YEAR(n)
- INTERVAL YEAR(n) TO MONTH
- INTERVAL MONTH(n)
- INTERVAL DAY(n)
- INTERVAL DAY(n) TO HOUR
- INTERVAL DAY(n) TO MINUTE
- INTERVAL DAY(n) TO SECOND(m)
- INTERVAL HOUR(n)
- INTERVAL HOUR(n) TO MINUTE
- INTERVAL HOUR(n) TO SECOND(m)
- INTERVAL MINUTE(n)
- INTERVAL MINUTE(n) TO SECOND(m)
- INTERVAL SECOND(n, m)
属性のデータ型が上記のリストにない場合、total_interval_digitsはその属性に対して有意ではありません。
- num_fractional_digitsは、特定の属性の精度またはスケールを指定します。num_fractional_digitsの値は、以下の型のm値と対応します。
- DECIMAL(n, m)
- TIME(m)
- TIME(m) WITH TIME ZONE
- TIMESTAMP(m)
- TIMESTAMP(m) WITH TIME ZONE
- INTERVAL DAY(n) TO SECOND(m)
- INTERVAL HOUR(n) TO SECOND(m)
- INTERVAL MINUTE(n) TO SECOND(m)
- INTERVAL SECOND(n, m)
属性のデータ型が上記のリストにない場合、num_fractional_digitsはその属性に対して有意ではありません。
- charset_codeは、属性に関連付けられたサーバー文字セットを指定します。
これは属性が文字型である場合にのみ有意です。
sqltypes_td.hヘッダー ファイルは、charset_etを以下のように定義しています。
typedef int charset_et;
有効な値は、
sqltypes_td.hのcharset_en列挙定数で以下のように定義されています。
typedef enum charset_en
{
UNDEF_CT=0,
LATIN_CT=1,
UNICODE_CT=2,
KANJISJIS_CT=3,
KANJI1_CT=4
} charset_en;
JSON属性では、charset_codeはJSON属性がどのように定義されているかに応じて、LATIN_CTまたはUNICODE_CTになります。