次の文は、UDFがトレース出力を書き込むためのTrace_Output列を定義するトレース テーブルを作成するものです。
CREATE GLOBAL TEMPORARY TRACE TABLE UDF_Trace (vproc_ID BYTE(2) ,Sequence INTEGER ,Trace_Output VARCHAR(256)) ON COMMIT DELETE ROWS;
次のコードでは、トレース文字列の値を使用することにより、デバッグのレベルを決定しています。
#define SQL_TEXT Latin_Text
#include <sqltypes_td.h>
#include <string.h>
void Find_Text ( VARCHAR_LATIN *searched_string,
VARCHAR_LATIN *pattern,
CHARACTER_LATIN *result,
int *indicator_searched_string,
int *indicator_pattern,
int *indicator_result,
char sqlstate[6],
SQL_TEXT fncname[129],
SQL_TEXT sfncname[129],
SQL_TEXT error_message[257] )
{
SQL_TEXT trace_string[257];
char trace_output[257];
void *argv[1];
int length[1];
char debug_level = '0';
/* Get the trace string specified by SET SESSION FUNCTION */
/* TRACE and use it to determine debug level. */
FNC_Trace_String(trace_string);
if (trace_string[0] != 0)
debug_level = trace_string[0];
...
switch (debug_level)
{
case '1':
/* Debug Level 1: Output the function name */
sprintf(trace_output, "Function: %s", sfncname);
break;
case '2':
/* Debug Level 1: Output all values */
sprintf(trace_output,
"Function: %s, string: %s, pattern: %s",
sfncname, searched_string, pattern);
break;
}
...
/* Output the trace string to the trace table. */
argv[0] = trace_output;
length[0] = strlen(trace_output);
FNC_Trace_Write_DL(1, argv, length);
...
}
次の文では、UDF_Traceテーブルのトレース出力を有効にし、トレース文字列を2に設定することにより、UDFがすべての値をトレース テーブルに出力するようにしています。
SET SESSION FUNCTION TRACE USING '2' FOR TABLE UDF_Trace;
SET SESSION FUNCTION TRACE文を実行すると、それまで有効だったすべてのトレース テーブルが無効になります。
次の文は、トレース テーブルに対する問合わせを実行することにより、UDFからのトレース出力を取り出します。
SELECT * FROM UDF_Trace ORDER BY 1, 2;