17.00 - 17.05 - STRUCTURED型UDTの属性値へのアクセス - 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
日本語 (日本)

STRUCTURED型UDT(動的なUDTを含む)の属性値にアクセスするには、以下のようにします。

  1. [オプション]FNC_GetStructuredAttributeCountを呼び出し、UDTにある属性の数を取得します。
  2. [オプション]FNC_GetStructuredAttributeInfoを呼び出し、UDTにある属性に関する情報(データ型など)を取得します。
  3. 属性のデータ型に従い、属性値にアクセスします。
    属性 結果
    LOBを表わすものでない場合 その属性の基礎となる型にマッピングされるCデータ型を使用してバッファを割り当てます。

    FNC_GetStructuredAttributeまたはFNC_GetStructuredAttributeByNdxを呼び出すことにより、割り振ったバッファ内に属性の値を入れます。

    LOBを表わす場合 その属性のロケータを入れるためのLOB_LOCATORを宣言します。

    FNC_GetStructuredInputLobAttributeまたはFNC_GetStructuredInputLobAttributeByNdxを呼び出すことによって、そのLOB_LOCATORを、属性のLOBロケータに設定します。

    データを読み取るには、ラージ オブジェクトの値へのアクセスのステップに従います。

FNC_GetStructuredAttributeCount、FNC_GetStructuredAttributeInfo、FNC_GetStructuredAttribute、FNC_GetStructuredAttributeByNdx、FNC_GetStructuredInputLobAttribute、およびFNC_GetStructuredInputLobAttributeByNdxの詳細については、Cライブラリ関数を参照してください。

INTEGERを表わすSTRUCTURED型属性の値にアクセスする方法を示すコードの一部を以下に示します。

void getX( UDT_HANDLE *pointUdt,
           INTEGER    *result,
           char        sqlstate[6])
{
    INTEGER x;
    int nullIndicator;
    int length;
    /* Get the x attribute of pointUdt. */
    FNC_GetStructuredAttribute(*pointUdt, "x", &x, SIZEOF_INTEGER,
                               &nullIndicator, &length);
    if (nullIndicator == -1) {
        /* do null handling here */
        ...
        return;
    }

    ...
}