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

以下に示すのは、定数式入力引数を指定して呼び出すテーブルUDFのJavaメソッドを書く際の基本ステップです。

  1. CREATE FUNCTION文でパラメータを指定している順序で、パラメータ リストを定義します。

    詳細については、テーブルUDFのメソッド シグネチャを参照してください。

  2. テーブルUDFが動的な結果行指定で定義される場合は、Tbl.getColDef()を呼び出し、メソッドが戻さなければならない結果の行の引数の実数とデータ型を取得します。
  3. Tbl.getPhase()を呼び出して、モード(戻り値)がTbl.TBL_MODE_CONSTであることを検証します。このモードになっていれば、テーブル関数は定数式の入力引数を指定して呼び出されたことになります。
  4. Tbl.getPhase()からphase引数の中に戻される値を使って、Teradata Databaseがメソッドを呼び出すフェーズと、取るべきアクションを判別します。
    メソッドの動作
    Tbl.TBL_PRE_INIT テーブルUDFの制御コピーにすべきかどうかを決定する必要があります(メソッドの他のコピーは他のAMP vproc上で実行されます)。

    メソッドの他のすべてのコピーに制御コンテキストを提供する場合、メソッドはTbl.control()を呼び出す必要があります。

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

    メソッドのすべてのコピーは、いずれかのコピーがTbl.TBL_INITフェーズに進む前にこのフェーズを完了する必要があります。

    Tbl.TBL_INIT 必要に応じて、ローカル ファイルなどのシステム リソースへのアクセスを開始できます。

    それ以降は参加しないメソッドのコピーでは、Tbl.optOut()を呼び出す必要があります。Teradata Databaseがそのメソッドを再び呼び出すことはありません。

    メソッドのすべてのコピーは、いずれかのコピーがTbl.TBL_BUILDフェーズに進む前にこのフェーズを完了する必要があります。

    Tbl.TBL_BUILD 以下のいずれかのアクションを実行します。

    メソッドの条件

    • 作成する行があれば、非NULLの入力値を含む各出力引数を完成させることで、出力行を作成します。

      メソッドはTbl.TBL_BUILDフェーズのままです。

    • 作成する行がなければ、SQLExceptionをスローし、SQLStateフィールドを"02000"に設定してデータがないことを示します。

      メソッドはTbl.TBL_ENDフェーズに進みます。

    Tbl.TBL_END (テーブルUDFの制御コピーの場合)このテーブルUDFの他のすべてのコピーがこのフェーズを完了した後にこのフェーズで呼び出されます。これにより制御関数は、外部への通知を実行できます。

    メソッドは、このフェーズから戻った後にTeradata Databaseから再度呼び出されることはありません。

    Tbl.TBL_ABORT アボートされます。メソッドはこのフェーズでいつでも呼び出されることがありますが、このフェーズに入るのは、テーブル関数の1つのコピーがTbl.abort()を呼び出した場合に限られます。ユーザーによるアボートなど、外的な理由によるメソッドのアボートでは、このフェーズに入りません。
  5. メソッドがエラーを検出した場合は、SQLExceptionをスローします。詳細は、例外処理を参照してください。