Tbl.getPhaseEx()オプションを使用すると、変数モードのテーブル関数を開発しているときに、テーブルのフェーズの遷移をより細かく制御できます。これらのオプションを使用して、テーブル関数の実行時に必要な、フェーズの遷移の数を減らすことができます。それにより、UDF呼び出しの回数が少なくなり、テーブル関数のパフォーマンスを向上することになります。
次に示すテーブルでは、Tbl.getPhaseEx()オプションを使用した場合と、使用しなかった場合の各行に必要なフェーズの遷移の数を比較しています。これらのフェーズは、P (TBL_PRE_INIT)、I (TBL_INIT)、B (TBL_BUILD)、B EOF (TBL_BUILD_EOFではなく、EOFの合図を送るTBL_BUILD)、F (TBL_FINI)、およびE (TBL_END)です。Xは出力行に対する入力のスケール係数です。
処理モード | Tbl.getPhaseEx()オプションが使用されない場合に必要なフェーズ | 特定のTbl.getPhaseEx()オプションが使用された場合に必要なフェーズ |
---|---|---|
1:1 (1ロー入力: 1ロー出力) |
I, B, B EOF, F | TBL_NEWROWオプションが設定されている場合はB。 |
1:M (1行入力:複数行出力) |
I, B*X, B EOF, F | TBL_NEWROWEOFオプションが設定されている場合はB * X。 |
M:1 (複数行入力:1行出力) |
I, B EOF, F | TBL_NEWROW | TBL_LASTROWオプションが設定されている場合はB * X。 |
例えば、次のようになります。
1:1処理モードでは、TBL_NEWROWオプションを使用して、TBL_BUILD呼び出しごとに新しい行を取得します。
tbl.getPhaseEx(phase, tbl.TBL_NEWROW);
この場合、関数は次に示すフェーズをパス スルーします。
1:M処理モードでは、TBL_NEWROWEOFオプションを使用して、EOFの合図が送られたときに新しい行を取得します。
tbl.getPhaseEx(phase, tbl.TBL_NEWROWEOF);
この場合、関数は次に示すフェーズをパス スルーします。
M:1処理モードでは、以下を使用します。
tbl.getPhaseEx(phase, tbl.TBL_LASTROW | tbl.TBL_NEWROW);
M:1と1:Mを組み合わせた処理モードは、次のように使用します。これは、EOFまで新しい行を渡しません。
tbl.getPhaseEx(phase, tbl.TBL_LASTROW |tbl.TBL_NEWROWEOF);
この場合、関数は次に示すフェーズをパス スルーします。
詳細は、getPhaseEx(int[] phase, int option)を参照してください。