トレース出力をトレース テーブルに書き込む - Advanced SQL Engine - Teradata Database

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

Product
Advanced SQL Engine
Teradata Database
Release Number
17.10
Published
2021年7月
Language
日本語
Last Update
2021-09-23
dita:mapPath
ja-JP/rin1593638965306.ditamap
dita:ditavalPath
ja-JP/wrg1590696035526.ditaval
dita:id
B035-1147
Product Category
Software
Teradata Vantage

CREATE GLOBAL TEMPORARY TRACE TABLE文でトレース テーブルを作成する際には、UDFが実行中にトレース出力を書き込むために使用する列を定義します。

トレース出力をトレース テーブルの列に書き込むには、UDFの中でFNC_Trace_Write_DLを呼び出します。その呼び出しでは、次の3個の引数を指定します。
  • トレース テーブルの列に保存するデータへのポインタの配列
  • 配列の要素のカウント
  • 配列の各要素の長さの配列

次のトレース テーブル定義があるとします。

CREATE GLOBAL TEMPORARY TRACE TABLE UDF_Trace
  (vproc_ID BYTE(2)
  ,Sequence INTEGER
  ,UDF_name CHAR(15)
  ,x_value INTEGER)
ON COMMIT DELETE ROWS;

トレース テーブルの最初の2列には、Teradataの関数トレース サブシステムにより値が入れられます。

内容
1 UDFが実行するPEまたはAMP vprocの番号
2 FNC_Trace_Write_DLの呼び出し元
  • PE上で実行するUDFの場合、2番目の列の値は、呼び出しを実行する関数に関係なく、セッションがログオフするまでFNC_Trace_Write_DLへの呼び出しごとに1ずつ増分する連番です。
  • AMP上で実行するUDFの場合、2番目の列の値は、トレース テーブルについてAMPに書き込まれた最新の連番+1です。

UDFの中で、トレース テーブルのUDF_name列とx_value列に値を出力するための文は、次のようになります。

INTEGER   x_value;
void      *column_list[2];
int       length[2];
   
column_list[0] = sfncname;          /* UDF input argument */
column_list[1] = &x_value;
   
length[0] = strlen((const char *)sfncname);
length[1] = sizeof(INTEGER);
x_value = 45;
   
FNC_Trace_Write_DL(2, column_list, length);