目的
エラー条件を検出して続行できなくなった場合に、テーブル関数またはテーブル演算子がリクエストを手順どおりにアボートするのを可能にします。
構文
int FNC_TblAbort(void)
戻り値
アボートの発行元 | FNC_TblAbortが戻す値 |
---|---|
テーブル関数のこのコピー | 1。 |
テーブル関数の別のコピー | 0。 |
有効な呼び出しモード
このライブラリ関数は、テーブル関数が呼び出されたいずれのフェーズまたはモードにおいても有効です。
使用上の注意
テーブル関数のどのコピーでもFNC_TblAbortを呼び出せるので、テーブル関数は戻り値を検査して、どのコピーが呼び出しを実行したかを判別する必要があります。
戻り値 | 結果 |
---|---|
0 | テーブル関数の別のコピーがアボートを発行しました。 FNC_TblAbortの呼び出しの戻り時に、テーブル関数のこのコピーは単に戻ります。 関数のこのコピーは再度呼び出され、FNC_GetPhaseの呼び出し時に、FNC_Phase引数がTBL_ABORTに設定されます。この関数はすべてのリソースをクローズし、その時点で割り振られているすべてのメモリを解放できます。 |
1 | テーブル関数のこのコピーがアボートを発行しました。 テーブル関数の残りのコピーは、次回にFNC_GetPhaseを呼び出すときにアボートについて通知され、その時点でFNC_Phaseの戻り引数の値がTBL_ABORTになります。 他のすべてのコピーがTBL_ABORTフェーズから戻った後に、制御はテーブル関数のこのコピーに戻され、その時点でテーブル関数は以下のステップを実行します。
|
制限
この関数は、テーブル関数内またはテーブル演算子内からのみ呼び出すことができます。この関数をUDM、外部ストアド プロシージャ、スカラー関数、または集約関数から呼び出すと、トランザクションで例外が発生します。
FNC_TblAbortの使用例
FNC_Phase Phase; if (FNC_GetPhase(&Phase) == TBL_MODE_CONST) { switch(Phase) { ... case TBL_BUILD: { ... /* Get some bad data here. Need to abort. */ if( FNC_TblAbort() ) { /* At this point, all other copies of the function */ /* should have finished cleaning up */ strcpy(sqlstate, "U0004"); strcpy(error_message, "Bad Input data - not processed"); break; } ... } } ...