17.00 - 17.05 - FNC_GetExtendedJSONInfo - 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
日本語 (日本)

目的

外部ルーチンの入力パラメータまたは出力パラメータとして使用されるJSON型インスタンスの最大長、インライン長、文字セット、およびストレージ形式を取得します。 またこの関数は、JSONデータがLOBとして格納されるかどうかも示します。 この関数は、追加のインライン長および格納形式情報が返されるFNC_GetJSONInfoに似ています。

構文規則

void
FNC_GetExtendedJSONInfo ( JSON_HANDLE       jsonHandle,
                          int             *inlineLength,
                          int             *maxLength,
                          charset_et      *charSet,
                          int             *numLobs,
                          json_storage_et *storageFmt);
JSON_HANDLE jsonHandle
外部ルーチンへのパラメータと定義されているJSON型へのハンドル。
int *inlineLength
行に格納できるJSONインスタンスの最大可能サイズを指定するパラメータを返します。サイズはバイト単位で指定されます。
int *maxLength
バイト単位のJSONインスタンスの可能な最大長を指定するパラメータを返します。
charset_et *charSet
sqltypes_td.hで定義されている、JSONテキストの文字セット、LATIN_CTまたはUNICODE_CTを指定するパラメータを返します。これがバイナリJSONインスタンスである場合、文字セットはUNDEF_CTとして指定されます。
int *numLobs
JSONデータを保存するために使用されるLOBの数を指定するパラメータを返します。有効な値は以下のとおりです。
  • 0: データがLOBとして保存されていないことを示す
  • 1: データがLOBとして保存されていることを示す
json_storage_et *storageFmt
JSONインスタンスに対し格納形式を指定するパラメータを返します。有効な値は、次のようにsqltypes_td.hで定義されます:
typedef enum json_storage_en
{
   JSON_INVALID_EN=-1,
   JSON_TEXT_EN=0,
   JSON_BSON_EN=1,
   JSON_UBJSON_EN=2,
   DATASET_AVRO_EN=3
} json_storage_en;

例: FNC_GetExtendedJSONInfo

/*
CREATE FUNCTION MyJSONUDF( a1 JSON(100) )
RETURNS VARCHAR(100)
NO SQL
PARAMETER STYLE SQL
DETERMINISTIC
LANGUAGE C
EXTERNAL NAME 'CS!MyJSONUDF!MyJSONUDF.c!F!MyJSONUDF';
*/
void MyJSONUDF( JSON_HANDLE   *json_instance,
                VARCHAR_LATIN *result,
                char           sqlstate[6])
{
   int maxLength = 0;
   int inlineLength = 0;
   charset_et charset = 0;
   int numLobs = 0;
   json_storage_et storageFmt = JSON_INVALID_EN;

/* Get the info of the JSON instance. */

   FNC_GetExtendedJSONInfo((*json_instance),&inlineLength, &maxLength, &charset, &numLobs, &storageFmt);
   sprintf(result, "Inline Length: %d, Max Length: %d, CharSet: %d, NumLobs: %d, Storage Format: %d", inlineLength, maxLength, charset, numLobs, storageFmt);
   ...
}

サンプル出力:

> Inline Length: 100, Max Length: 100, CharSet: 1, NumLobs: 0, Storage Format: 0