17.00 - 17.05 - C構造体による記憶域へのアクセス - 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
日本語 (日本)

集約関数で保存することが必要な中間結果の型は、関数の実行する計算の種類によって異なります。

下記の式を使用して標準偏差を計算する関数STD_DEV(x)があるとします。



この計算式に基づいて、関数では次のデータを記憶する必要があります。
  • N
  • sum(X2)
  • sum(X)

この関数では、必要な中間値に対応する要素を含む、次のようなCの構造体を宣言できます。

typedef struct agr_storage {
    FLOAT n;
    FLOAT x_sq;
    FLOAT x_sum;
} AGR_Storage;

次に、関数引数のFNC_Context_t.interim1を参照するAGR_Storageへのポインタを定義することができます。

関数宣言でのパラメータが、次のようになっているとします。

void STD_DEV ( FNC_Phase     phase,
               FNC_Context_t *fctx,
               FLOAT         *x,
               FLOAT         *result,
               char          sqlstate[6] )
{
     ...
}

下記の文により、関数引数FNC_Context_t.interim1を参照するAGR_Storageへのポインタs1を定義します。

AGR_Storage *s1 = fctx->interim1;

このようにしておけば、AGR_Storageへのポインタを使用することにより、記憶域へのアクセスが容易になります。例えば、次のようになります。

s1->n     = 0;
s1->x_sq  = 0;
s1->x_sum = 0;