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を呼び出した場合に限られます。ユーザーによるアボートなど、外的な理由による関数のアボートでは、このフェーズに入りません。 |