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

目的

エラー条件を検出して続行できなくなった場合に、テーブル関数またはテーブル演算子がリクエストを手順どおりにアボートするのを可能にします。

構文

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フェーズから戻った後に、制御はテーブル関数のこのコピーに戻され、その時点でテーブル関数は以下のステップを実行します。

  1. sqlstate引数を適切なSQLSTATE例外条件に設定します。

    詳細は、SQLSTATEの値を戻すを参照してください。

  2. error_message文字列をエラー メッセージ テキストに設定します。その文字はLATIN文字範囲内のものでなければなりません。
  3. すべてのリソースをクローズし、割り振られているすべてのメモリを解放します。
  4. 外部ログに書き込むか、外部エラー通知メッセージを送信します(該当する場合)。
  5. 戻ります。

制限

この関数は、テーブル関数内またはテーブル演算子内からのみ呼び出すことができます。この関数を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;
      }
      ...
   }
}
...