外部ストアド プロシージャをデータベースにインストールした場合、それ以降のデバッグは限られたものになります。
最善の方法は、関数をインストールする前に、それをデータベース外で開発およびテストすることです。その場合、関数の機能の検証には使い慣れたデバッグ ツールを使用できます。
データベース外のデバッグでは不十分な場合には、トレース テーブルを使用することにより、トレース診断出力を得ることができます。
手順の概略
トレース テーブルを使用して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 |