外部ストアド プロシージャ、UDM、またはUDFによって呼び出され、CREATE GLOBAL TEMPORARY TRACE TABLE文によって定義されている一時トレース テーブルにトレース出力を書き込みます。
構文規則
void FNC_Trace_Write_DL ( int argc, void *argv[], int length[] )
構文要素
- argc
- argv配列に含まれる出力引数のカウント。
この値は、トレース テーブルの列のうち、Teradata関数トレース サブシステムで使用される最初の2つの必須列を除く列の数でなければなりません。
- argv
- 一時トレース テーブルの列に書き込むデータへのポインタの配列。
- length
- argv配列内の各出力引数の長さの配列(バイト数単位)。
length要素の値の合計は正でなければならず、トレース テーブルの行のサイズより大きくすることはできません。
配列要素 列 argv[0] Debug_Trace.Sum_X argv[1] Debug_Trace.Sum_Y argv[2] Debug_Trace.Trace_Text
使用上の注意
トレース出力の値は検証されません。例えば、受け入れ先のカラムに対して数値が大きすぎる場合、または文字列の中に無効な文字が含まれている場合、保存される値は不正なものです。
誤った値を保存すると、トレース テーブルからデータを選択できないことがあります。例えば、無効な日付をTIMESTAMPカラムに書き込むと、そのデータに対する後続の選択操作は無効な日付エラーを戻し、結果は戻しません。トレース テーブルから不正なTIMESTAMPデータを読み取り、誤っている箇所を判別するには、以下のステップを実行します。
- 別のUDFを作成して、その入力引数をTIMESTAMPと定義し、それを文字列結果に変換させる。
- そのUDFをSELECT文で使用して、TIMESTAMPデータをトレース テーブルから読み取り、誤っている箇所を確認します。
選択できない可能性がある誤った値を保存しないようにするために、トレース テーブルを最初の2つの必須カラム以外は文字型のカラムだけで作成し、sprintfを使用して出力データを形式します。例については、例: トレース テーブルを使用したUDFのデバッグを参照してください。
対応する文字型の列に対して出力文字列が長すぎる場合、出力文字列は切り捨てられ、エラーは生成されません。
1つのUDF、UDM、または外部ストアド プロシージャで、必要なだけ何度でもFNC_Trace_Write_DLを呼び出すことができます。
- トレース出力用のトレース テーブルを使用可能にするためのSET SESSION FUNCTION TRACE文を実行していない場合。
- length配列の要素の値の合計が負であるか、トレース テーブルの行のサイズより大きい場合。
Teradata関数トレース サブシステムは、トレース テーブルの最初の2つの列に値を書き込みます。AMP上で実行するUDFと、PE上で実行する外部ストアド プロシージャ、UDM、またはUDFを同時にトレースするために同じトレース テーブルを使用する場合、2番目の列に書き込まれる連番は連続しなくなります。これは、AMPはトレース テーブルの最後の行のシーケンスに基づいて次の連番を決定し、行の出所に関係なく連番を追加するためです。PEからトレース テーブルに挿入される行は、PE vprocの番号と現在の連番に基づいて1つのAMPにハッシュされます。したがって、PEの現在の連番が5の場合に、トレース行をAMP 1に追加すると、AMP 1からそのテーブルへのトレース書き込みの連番は6になります。最善の方法は、AMPとPEで同時トレースを回避することです。
FNC_Trace_Write_DLの使用例
INTEGER Sum_x;
INTEGER Sum_y;
CHARACTER_LATIN message[45];
void *argv[3];
int length[3];
...
Sum_x = *In_data_x;
Sum_y = *In_data_y;
argv[0] = &Sum_x;
length[0] = sizeof(INTEGER);
argv[1] = &Sum_y;
length[1] = sizeof(INTEGER);
message = strcpy((char *)message, "The input values");
argv[2] = &message;
length[2] = strlen((const char *)message);
FNC_Trace_Write_DL(3, argv, length);
関連情報
CREATE GLOBAL TEMPORARY TRACE TABLEの詳細については、<Teradata Vantage™ - SQLデータ定義言語-構文規則および例、B035-1144>を参照してください。