トレース テーブルを使用したデバッグ - Advanced SQL Engine - Teradata Database

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

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
17.00
Published
2020年6月
Language
日本語
Last Update
2021-03-30
dita:mapPath
ja-JP/qwr1571437338192.ditamap
dita:ditavalPath
ja-JP/qwr1571437338192.ditaval
dita:id
B035-1147
Product Category
Software
Teradata Vantage

外部ストアド プロシージャをデータベースにインストールした場合、それ以降のデバッグは限られたものになります。

最善の方法は、関数をインストールする前に、それをデータベース外で開発およびテストすることです。その場合、関数の機能の検証には使い慣れたデバッグ ツールを使用できます。

データベース外のデバッグでは不十分な場合には、トレース テーブルを使用することにより、トレース診断出力を得ることができます。

手順の概略

トレース テーブルを使用してJava外部ストアド プロシージャをデバッグするための手順の概要を以下に示します。

この手順を使って、Java UDFをデバッグすることもできます。
  1. CREATE GLOBAL TEMPORARY TRACE TABLE文を使用して、トレース テーブルを作成します。

    トレース テーブルの最初の2列は、Teradata関数トレース サブシステムによって使用されます。3番目以降の列は、外部ストアド プロシージャが実行中にトレース出力を作成する際に使用できます。

  2. SET SESSION FUNCTION TRACE文を使用して、トレース テーブルを トレース出力に使用できるようにします。

    オプションのトレース文字列を指定すると、外部ストアド プロシージャの実行中にそれを取得できます。

  3. 外部ストアド プロシージャを呼び出します。
  4. 外部ストアド プロシージャのDbsInfo.getTraceString()を呼び出し、SET SESSION FUNCTION TRACE文で指定されたトレース文字列を取得します。

    トレース文字列の値を使用して、トレース テーブルへの出力内容を決定します。

  5. DbsInfo.traceWrite()を呼び出して、トレース出力をトレース テーブルの列に書き込みます。
  6. 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