17.00 - 17.05 - 集約関数パラメータ スタイルSQLの構文 - 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
日本語 (日本)
void  function_name ( FNC_Phase     aggregation_phase,
                     FNC_Context_t *function_context,
                     type_1        *input_parameter_1,
                      ...,
                     type_n        *input_parameter_n,
                     result_type   *result,
                     int           *indicator_parameter_1,
                      ...,
                     int           *indicator_parameter_n,
                     int           *indicator_result,
                     char           sqlstate[6],
                     SQL_TEXT       function_name[m],
                     SQL_TEXT       specific_function_name[l],
                     SQL_TEXT       error_message[p] )
{
     ...
}

説明

パラメータ 指定内容 入力/ 出力
FNC_Phase aggregation_phase 現在の集約フェーズ。集約フェーズは、集約関数において渡されたデータを処理する方法を決定します。

FNC_Phaseは次のように定義されています。

typedef enum {
    AGR_INIT        = 1,
    AGR_DETAIL      = 2,
    AGR_COMBINE     = 3,
    AGR_FINAL       = 4,
    AGR_NODATA      = 5
} FNC_Phase;

aggregation_phaseの値

  • AGR_INITであれば、この関数は集約データを累積するための中間記憶域を割り振り、初期設定する必要があります。
  • AGR_DETAILであれば、関数は、特定のグループに対して定義されている中間記憶域に引数入力データを集積する必要があります。
  • AGR_COMBINEであれば、関数は集約するグループごとに中間記憶域をすべて結合する必要があります。
  • AGR_FINALであれば、関数では、そのグループの最終結果を作成する必要があります。
  • AGR_NODATAであれば、関数では、NULL集約セット用の結果を生成する必要があります。
入力
FNC_Context_t * function_context 関数コンテキスト構造体へのポインタ。これは、集約関数の実行の対象となるグループの中間集約記憶域として使用されるものです。

FNC_Context_tは、次のように定義されています。

typedef struct FNC_Context_t {
    int         version;
    FNC_flags_t flags;
    void        *interim1;
    int         intrm1_length;
    void        *interim2;
    int         intrm2_length;
    long        group_count;
    long        window_size;
    long        pre_window;
    long        post_window;
} FNC_Context_t;
説明
  • version= コンテキスト構造体のバージョン。現在のバージョンは1です。
  • interim1 = 中間結果を入れる集約記憶域へのポインタ。
  • intrm1_length = interim1interim1
  • interim2 = interim1がAGR_COMBINEの場合に、aggregation_phase記憶域と結合する中間記憶域へのポインタ。
  • intrm2_length = interim1interim2

上に記載されていないFNC_Context_tのメンバーは、将来の使用に備えて予約されます。

入力
type_n * input_parameter_n 入力パラメータ。nはCREATE FUNCTION定義に含まれるパラメータの数です。n = 0なら、入力パラメータはありません。このデータ型は、sqltypes_td.h内のCデータ型のうち、入力引数のSQLデータ型に対応するものです。

入力パラメータの数は最大128個です。

入力
result_type *result 結果。

resultは、関数の戻す結果を入れる十分な大きさのデータ領域へのポインタです。そのデータ領域は、対応するCREATE FUNCTION文のRETURNS句で定義されるものです。

出力
int * indicator_parameter_n 入力パラメータに同じ順序で対応するインジケータ パラメータ(n > 0の関数の場合)。

インジケータ引数の値。

  • -1であれば、対応する入力引数はNULLです。
  • 0であれば、対応する入力引数は値です。
入力
int * indicator_result 結果に対応する結果インジケータ パラメータ。 出力
char sqlstate[6] 成功、例外、または警告を示す戻り値。これは、6文字のC文字列へのポインタです(最初の5文字はASCII、最後の文字はCのNULL文字)。関数でエラーを検出した場合、関数でsqlstateをSQLSTATEの例外または警告に設定できます。

この文字列の初期値は'00000' (成功)です。

出力
SQL_TEXT function_name[m] 関数名。これはC文字列へのポインタです。これは、CREATE FUNCTION function_nameで指定される関数名と同じ名前です。

関数の中では、この名前を使用してエラー メッセージを作成できます。

ANSI SQL標準では、mの最大値は128と定義されています。Teradata Databaseでは、関数名は最大30文字です。

入力
SQL_TEXT specific_function_name[l] 同じ名前の関数が複数個ある場合、呼び出す外部関数の特定名。これはC文字列へのポインタです。これは、CREATE FUNCTION文のSPECIFIC句で指定する特定名と同じ名前です。

CREATE FUNCTION文にSPECIFIC句が含まれていない場合、この名前は、CREATE FUNCTION function_nameで指定される関数名と同じです。

関数の中では、この名前を使用してエラー メッセージを作成できます。

ANSI SQL標準では、lの最大値は128と定義されています。Teradata Databaseでは、関数名は最大30文字です。

入力
SQL_TEXT error_message[p] エラー メッセージのテキスト。これは、C文字列へのポインタであり、pの最大値は256です。 出力