外部ストアド プロシージャをデータベースにインストールした場合、それ以降のデバッグは限られたものになります。
最善の方法は、関数をインストールする前に、それをデータベース外で開発およびテストすることです。その場合、関数の機能の検証には使い慣れたデバッグ ツールを使用できます。
データベース外のデバッグでは不十分な場合には、トレース テーブルを使用することにより、トレース診断出力を得ることができます。
手順の概略
トレース テーブルを使用してJava外部ストアド プロシージャをデバッグするための手順の概要を以下に示します。
- CREATE GLOBAL TEMPORARY TRACE TABLE文を使用して、トレース テーブルを作成します。
トレース テーブルの最初の2列は、Teradata関数トレース サブシステムによって使用されます。3番目以降の列は、外部ストアド プロシージャが実行中にトレース出力を作成する際に使用できます。
- SET SESSION FUNCTION TRACE文を使用して、トレース テーブルを トレース出力に使用できるようにします。
オプションのトレース文字列を指定すると、外部ストアド プロシージャの実行中にそれを取得できます。
- 外部ストアド プロシージャを呼び出します。
- 外部ストアド プロシージャのDbsInfo.getTraceString()を呼び出し、SET SESSION FUNCTION TRACE文で指定されたトレース文字列を取得します。
トレース文字列の値を使用して、トレース テーブルへの出力内容を決定します。
- DbsInfo.traceWrite()を呼び出して、トレース出力をトレース テーブルの列に書き込みます。
- SELECT文を使用して、トレース テーブルに対して問合わせを実行し、外部ストアド プロシージャからトレース出力を取り出します。
例: トレース テーブルを使用した外部ストアド プロシージャのデバッグ
以下の文では、外部ストアド プロシージャがトレース出力を書き込むTrace_Outputという1列を定義するトレース テーブルを作成しています。
CREATE GLOBAL TEMPORARY TRACE TABLE XSP_Trace (vproc_ID BYTE(2) ,Sequence INTEGER ,Trace_Output VARCHAR(256)) ON COMMIT PRESERVE ROWS;
以下のコードでは、トレース文字列の値を使用して、入力引数の値をトレース テーブルに書き込むかどうかを決定しています。
public static void debugJXSP(String[] Str) throws SQLException {
try {
/* If the trace string is set to 2, write the value */
/* of the Str input argument to the trace table. */
if (Str[0]!=null && DbsInfo.getTraceString().compareTo("2")==0) {
DbsInfo.traceWrite("Debug Info: " + Str[0]);
}
String[] x=null;
/* The following is an exception. */
if (x[0].compareTo(Str[0])==0) return;
}
catch (Throwable t) {
StackTraceElement[] errs = t.getStackTrace();
DbsInfo.traceWrite(t.toString() + " " + t.getMessage());
for (int i=0;i<errs.length;i++)
DbsInfo.traceWrite("In " + errs[i].getFileName() +
" at "+ errs[i].getLineNumber());
throw new SQLException(t.getMessage(), "38U01");
}
}
次の文では、XSP_Traceテーブルのトレース出力を有効にし、トレース文字列を2に設定することにより、外部ストアド プロシージャが入力引数の値をトレース テーブルに出力するようにしています。
SET SESSION FUNCTION TRACE USING '2' FOR TABLE XSP_Trace;
SET SESSION FUNCTION TRACE文を実行すると、それまで有効だった セッションのすべてのトレース テーブルが無効になります。
次の文は、トレース テーブルに対する問合わせを実行することにより、外部ストアド プロシージャからのトレース出力を取り出します。
SELECT Trace_Output FROM XSP_Trace ORDER BY Sequence;
関連トピック
| 詳細情報 | 参照先 |
|---|---|
| DbsInfo.traceWrite()メソッド | com.teradata.fnc.DbsInfo |
| DbsInfo.getTraceString()メソッド | |
| TraceObjクラス | com.teradata.fnc.TraceObj |
| CREATE GLOBAL TEMPORARY TRACE TABLE | Teradata Vantage™ - SQLデータ定義言語-構文規則および例、B035-1144 |
| SET SESSION FUNCTION TRACE |