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

FNC_GetPhaseが戻すことができる処理フェーズは、モードによって異なります。

FNC_Modeの値 フェーズの値 テーブル関数
TBL_MODE_VARY TBL_PRE_INIT 対象になるすべての行の初めに呼び出されます。関数の入力引数には、最初のセットのデータが含まれます。

このフェーズでは、関数が総合的なグローバル コンテキストを設定する機会を持つことになりますが、結果行は作成しません。

関数はTBL_INITフェーズに進みます。

TBL_INIT ファイルなどの外部オブジェクトへの接続をオープンする必要がある場合に、それをオープンします。関数の入力引数には、最初のセットのデータが含まれます。

このフェーズでは、関数は結果行を作成しません。

関数はTBL_BUILDフェーズに進みます。

TBL_BUILD 結果の引数を完成して行を作成します。

関数は、sqlstate引数を"02000" (データがないことを示す値)に設定するまでTBL_BUILDフェーズのままです(そのように設定した時点でTBL_FINIフェーズに進みます)。

TBL_FINI TBL_INITフェーズでオープンされたファイル ハンドルなどのすべての接続をクローズします。

変数入力データがさらにある場合、関数はTBL_INITフェーズに戻ります。そうでない場合、関数はTBL_ENDフェーズに進みます。

TBL_END すべての外部接続をクローズし、割り振られている可能性があるスクラッチ メモリを解放します。テーブル関数は、このフェーズの後に再度呼び出されることはありません。
TBL_ABORT アボートのフェースで、すべての外部接続をクローズし、事前に割り振られているすべてのメモリを解放します。関数はこのフェーズでいつでも呼び出されることがありますが、このフェーズに入るのは、テーブル関数の1つがライブラリ関数FNC_TblAbortを呼び出した場合に限られます。ユーザーによるアボートなど、外的な理由による関数のアボートでは、このフェーズに入りません。
TBL_MODE_CONST TBL_PRE_INIT 関数を他のAMP vproc上で実行するすべてのテーブル関数の制御コピーとするかどうかを判別できます。

関数でテーブル関数の他のすべてのコピーに制御コンテキストを提供したい場合、関数はFNC_TblControlを呼び出す必要があります。

関数をテーブル関数の制御コピーにしたくない場合、または関数が制御関数を必要としないように設計されている場合、関数は単に戻るだけで、このフェーズでは何も実行しません。

テーブル関数のすべてのコピーは、いずれかのコピーがTBL_INITフェーズに進む前にこのフェーズを完了する必要があります。

TBL_INIT ファイルなどの外部オブジェクトへの接続をオープンする必要がある場合に、それをオープンします。

それ以降は参加しない関数のコピーでは、FNC_TblOptOutを呼び出す必要があります。関数が戻った後、再度呼び出されることはありません。

テーブル関数のすべてのコピーは、いずれかのコピーがTBL_BUILDフェーズに進む前にこのフェーズを完了する必要があります。

TBL_BUILD 結果の引数を完成して行を作成します。

関数は、sqlstate引数を"02000" (データがないことを示す値)に設定するまでTBL_BUILDフェーズのままです(そのように設定した時点でTBL_ENDフェーズに進みます)。

TBL_END すべての外部接続をクローズし、割り振られている可能性があるスクラッチ メモリを解放します。テーブル関数は、このフェーズから戻った後に再度呼び出されることはありません。

テーブル関数の制御コピーが存在する場合、それはテーブル関数の他のすべてのコピーがこのフェーズを完了した後にこのフェーズで呼び出されます。これにより制御関数は、最終クリーンアップまたは外部への通知を実行できます。

TBL_ABORT アボートのフェースで、すべての外部接続をクローズし、事前に割り振られているすべてのメモリを解放します。関数はこのフェーズでいつでも呼び出されることがありますが、このフェーズに入るのは、テーブル関数の1つがライブラリ関数FNC_TblAbortを呼び出した場合に限られます。ユーザーによるアボートなど、外的な理由による関数のアボートでは、このフェーズに入りません。