JSON属性の文字列表現を取得するには、次の操作を実行します。
- FNC_GetStructuredAttributeInfo_EONを呼び出します。
- 前の関数呼び出しから返されたlob_lengthが0の場合、FNC_GetStructuredAttributeを使用して、JSON属性の文字列表現を取得できます。
- lob_lengthが0でない場合、FNC_GetStructuredAttributeの代わりにFNC_GetStructuredInputLobAttributeを使用する必要があります。
FNC_GetStructuredAttributeを呼び出すには、その前に、その属性の基礎となる型にマッピングされるCデータ型を使って、returnValueが指すバッファを割り振っておく必要があります。例えば、属性の基礎となる型がSQL INTEGERデータ型の場合、次のようにバッファを宣言します。
INTEGER value;
属性がDISTINCT型である場合、DISTINCT型が表わすCデータ型を使ってバッファを割り振ります。例えば、その属性がSQL SMALLINTデータ型を表わすDISTINCT型の場合、次のようにバッファを宣言します。
SMALLINT value;
属性の基礎となる型が文字列である場合、FNC_GetStructuredAttributeは、NULL終了文字列を戻します。定義するバッファは、NULL終了を含めて入れることのできる十分な大きさのものでなければなりません。
属性がSTRUCTURED型の場合、FNC_GetStructuredAttributeはUDTハンドルを戻します。STRUCTURED型の属性に関する記述情報を取得するには、UDTハンドルをFNC_GetStructuredAttributeInfoに渡します。
使用できるCデータ型の詳細は、Cデータ型を参照してください。
bufSize引数に入れて渡す値が必ずTeradata Databaseのデータ型の長さに一致するようにするには、sqltypes_td.hヘッダー ファイルに定義されている次のようなマクロを使用します。
マクロ | 説明 |
---|---|
SIZEOF_CHARACTER_LATIN_WITH_NULL(len) SIZEOF_CHARACTER_KANJISJIS_WITH_NULL(len) SIZEOF_CHARACTER_KANJI1_WITH_NULL(len) SIZEOF_CHARACTER_UNICODE_WITH_NULL(len) |
NULL終了文字も含め、文字数lenのCHARACTERデータ型のバイト単位の長さを戻します。例えば、以下の式は8 (3 * 2 + 2 = 8)の長さを戻します。SIZEOF_CHARACTER_UNICODE_WITH_NULL(3) |
SIZEOF_VARCHAR_LATIN_WITH_NULL(len) SIZEOF_VARCHAR_KANJISJIS_WITH_NULL(len) SIZEOF_VARCHAR_KANJI1_WITH_NULL(len) SIZEOF_VARCHAR_UNICODE_WITH_NULL(len) |
NULL終了文字も含め、文字数lenのVARCHARデータ型のバイト単位の長さを戻します。例えば、以下の式は8 (3 * 2 + 2 = 8)の長さを戻します。SIZEOF_VARCHAR_UNICODE_WITH_NULL(3) |
SIZEOF_BYTE(len) SIZEOF_VARBYTE(len) |
指定されたBYTEデータ型またはVARBYTEデータ型のバイト単位の長さを戻します(lenは値の数)。 |
SIZEOF_GRAPHIC(len) SIZEOF_VARGRAPHIC(len) |
指定されたCHARACTER(n) CHARACTER SET GRAPHICまたはVARCHAR(n) CHARACTER SET GRAPHICのデータ型長がバイト数単位で返されます。lenはここで値の数を指定します。 |
SIZEOF_BYTEINT SIZEOF_SMALLINT SIZEOF_INTEGER SIZEOF_BIGINT SIZEOF_REAL SIZEOF_DOUBLE_PRECISION SIZEOF_FLOAT SIZEOF_DECIMAL1 SIZEOF_DECIMAL2 SIZEOF_DECIMAL4 SIZEOF_DECIMAL8 SIZEOF_DECIMAL16 SIZEOF_NUMERIC1 SIZEOF_NUMERIC2 SIZEOF_NUMERIC4 SIZEOF_NUMERIC8 SIZEOF_NUMERIC16 SIZEOF_NUMBER |
指定された数値データ型のバイト単位の長さを戻します。 NUMBERの場合、返される長さは4 + 2 + 17 = 23バイトになります。これは、Teradata Databaseが小数部分に最大長(17バイト)を割り当てるためです。 |
SIZEOF_DATE SIZEOF_ANSI_Time SIZEOF_ANSI_Time_WZone SIZEOF_TimeStamp SIZEOF_TimeStamp_WZone |
指定された日付/時刻型のバイト単位の長さを戻します。 |
SIZEOF_INTERVAL_YEAR SIZEOF_IntrvlYtoM SIZEOF_INTERVAL_MONTH SIZEOF_INTERVAL_DAY SIZEOF_IntrvlDtoH SIZEOF_IntrvlDtoM SIZEOF_IntrvlDtoS SIZEOF_HOUR SIZEOF_IntrvlHtoM SIZEOF_IntrvlHtoS SIZEOF_MINUTE SIZEOF_IntrvlMtoS SIZEOF_IntrvlSec |
指定されたINTERVAL型のバイト単位の長さを戻します。 |
SIZEOF_UDT_HANDLE |
UDTへのハンドルの長さをバイト数単位で戻します。 |