17.00 - 17.05 - 記憶域の割振り - 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
日本語 (日本)

AGR_INIT集約フェーズにおいて、UDFは、FNC_Context_t.interim1の参照する中間記憶域を割り振る必要があります。

必要なメモリを割り振るため、UDFではFNC_DefMemライブラリ関数を呼び出します。その際には、構造体のサイズ(最大64000バイト)を指定します。UDFにおいて、CREATE FUNCTION文のCREATE AGGREGATE句で指定されるinterim_sizeの値を超えるメモリを要求することはできません。interim_sizeが指定されていないなら、最大値は64バイトになります。

パフォーマンスを最高にするためには、関数で必要な分だけのメモリを中間記憶域に割り振るようにしてください。

標準偏差関数のサンプルの場合、構造体のサイズはsizeof(AGR_Storage)によって計算できます。FNC_Context_t.interim1の参照する中間記憶域を割り振る文は、次のようになります。

s1 = FNC_DefMem(sizeof(AGR_Storage));
次のいずれかの条件が成立する場合、FNC_DefMemはNULLポインタを戻します。
  • 集約関数が、CREATE FUNCTION文のCREATE FUNCTION句で指定されるinterim_sizeの値を超えるメモリを要求した場合。
  • CREATE FUNCTION文のCLASS AGGREGATE句でinterim_sizeの値が指定されておらず、集約関数がデフォルトの64バイトを超えるメモリを要求した場合。
  • 関数が、最大値である64000バイトを超えるメモリを要求した場合。

UDFがメモリなしのため処理を完了できない場合、関数はSQLSTATEエラー結果引数を設定してエラーを戻すことができます。