実装のガイドライン - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQL外部ルーチン プログラミング

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
17.00
Published
2020年6月
Language
日本語
Last Update
2021-03-30
dita:mapPath
ja-JP/qwr1571437338192.ditamap
dita:ditavalPath
ja-JP/qwr1571437338192.ditaval
dita:id
B035-1147
Product Category
Software
Teradata Vantage

以下に示すのは、定数式の入力引数を指定して呼び出すテーブル関数を定義するための基本ステップです。

  1. SQL_TEXT定数を定義します。

    詳細については、SQL_TEXTの定義を参照してください。

  2. sqltypes_td.hヘッダー ファイルをインクルードします。

    詳細については、ヘッダー ファイルを参照してください。

  3. その関数で使用するマクロや変数が定義されているその他のヘッダー ファイルをインクルードします。
  4. CREATE FUNCTION文でパラメータを指定している順序で、関数パラメータ リストを定義します。

    詳細については、テーブル関数のパラメータ リストを参照してください。

  5. テーブル関数が動的な結果行指定で定義される場合は、FNC_TblGetColDefライブラリ関数を呼び出し、テーブル関数が戻さなければならない結果の行の引数の実数とデータ型を取得します。
  6. FNC_GetPhaseライブラリ関数を呼び出して、モードがTBL_MODE_CONSTであることを検証します。このモードになっていれば、テーブル関数は定数式の入力引数を指定して呼び出されたことになります。
  7. FNC_GetPhaseライブラリ関数がFNC_Phase引数に戻す値を使用して、関数が呼び出されたフェーズと、取るべきアクションを判別します。
    関数での規則
    TBL_PRE_INIT 関数を他のAMP vproc上で実行するすべてのテーブル関数の制御コピーとするかどうかを判別する必要があります。

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

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

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

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

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

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

    TBL_BUILD 以下のいずれかのアクションを実行します。
    関数に作成する行がある場合
    1. 対応するindicator_result引数に入力値0 (NULLではない)を持つ各結果引数を完成して、出力行を作成します。
    2. 結果値のindicator_result引数を設定します。

      結果引数がNULLの場合は、対応するindicator_result引数を-1に設定します。

      結果引数が非NULLの場合は、対応するindicator_result引数を0に設定します。

    関数はTBL_BUILDフェーズのままです。

    関数に作成する行がなければ、sqlstate引数に"02000"を設定し、データがないことを示します。関数はTBL_ENDフェーズに進みます。

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

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

    TBL_ABORT アボートのフェースで、すべての外部接続をクローズし、事前に割り振られているすべてのメモリを解放します。関数はこのフェーズでいつでも呼び出されることがありますが、このフェーズに入るのは、テーブル関数の1つがライブラリ関数FNC_TblAbortを呼び出した場合に限られます。ユーザーによるアボートなど、外的な理由による関数のアボートでは、このフェーズに入りません。
  8. 関数を実行し、該当する値を結果として設定します。
  9. 関数でエラーが発生した場合、以下を設定します。
    • 終了する前に、 sqlstate引数をSQLSTATE例外または警告に設定します。

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

    • error_message文字列をエラー メッセージ テキストに設定します。その文字はLATIN文字範囲内のものでなければなりません。入力時にこの文字列は、NULL終了文字列に初期設定しておきます。