16.20 - 診断域 - Teradata Vantage NewSQL Engine

Teradata Vantage™ SQL ストアド プロシージャおよび埋め込みSQL

prodname
Teradata Database
Teradata Vantage NewSQL Engine
vrm_release
16.20
category
プログラミング リファレンス
featnum
B035-1148-162K-JPN

診断域は、システムが管理するデータ構造で、その中にはSQLストアド プロシージャ内の文の実行ステータスに関する情報が含まれます。GET DIAGNOSTICS文を使用して、診断域から情報を取得できます。

診断域は、2つの構成要素に分かれています。
  • 1個のステートメント(文)域
  • ゼロ、1または16個までの条件域

ステートメント(文)域は、ヘッダーと呼ばれる場合もあり、ストアド プロシージャ内の最後の文に関する情報が含まれています。

条件域は、詳細域と呼ばれる場合もあり、ステートメント(文)域に記録されている文を実行した結果発生したエラー、警告または成功コードそれぞれに関する情報が含まれています。

診断域は、次の文の影響は受けません。
  • BEGIN … END
  • DECLARE
  • GET DIAGNOSTICS
  • ITERATE
  • LEAVE
  • LOOP
診断域は、エラー条件および警告条件の場合に限り、次の文の影響を受けます。これらの文はまず、診断域を消去してから、文の実行中に発生したエラー条件または警告条件に関する情報を挿入します。
  • CASE
  • FOR
  • IF
  • REPEAT
  • SET
  • WHILE

ルール

診断域には、次のルールが適用されます。
  • 各セッションに関連付けられる診断域は1つだけです。
  • 診断域は、クライアントが呼び出したストアド プロシージャの実行前に空に(クリア)されます。
  • 診断域の条件域に格納できる条件の最大数は16です。
  • Teradata Databaseは、CALL以外のすべてのSQL文の実行前に、診断域を空にします。

    文を実行した後、Teradata Databaseはステートメント(文)域(加えて、何らかの条件が発生した場合には、第1の条件域)に、それぞれ、文と実行中に発生した条件に関するデータを入れます。

  • Teradata Databaseは、SQLストアド プロシージャ内のCALL文の実行前には診断域を空にない。また、CALL文の実行後も診断域を変更しません。

    診断域の内容は、呼び出されたSQLストアド プロシージャの実行終了時のままです。

  • Teradata Databaseは、CASE、FOR、IF、REPEAT、SET、またはWHILE文いずれかの実行後、その文の実行中に例外条件または完了条件が発生している場合には、診断域を空にします。

    システムがステートメント(文)域と第1の条件域に文と発生した条件に関するデータを入れます。これらの文が正常完了しても、診断域には影響しません。

  • ハンドラ内のGET DIAGNOSTICS以外の文が例外またはユーザー定義条件を返し、そのハンドラーでその条件が処理されないと、Teradata DatabaseはRESIGNAL文を暗黙的に実行します。

    このアクションで診断域は空になり、Teradata Databaseはハンドラーが診断域に呼び出されたときの元の条件を復元します。するとシステムは、ハンドラーを含む複合文の外にある条件域1に条件を伝搬します。

    RESIGNAL文は、診断域に最大 16 個の条件域を追加することができます。

    RESIGNAL文のNUMBERオプションは、診断域に格納されている条件数を示します。

    診断域に16を超える条件の格納を試みると、NUMBER値は増分されず、文域のMOREフィールドが「Y」に設定されます。

診断域の構造

次のテーブルに文情報項目を示します。

フィールド 説明 データ型 デフォルト 属性
COMMAND_FUNCTION 実行されるSQL文を識別するテキスト文字列。 VARCHAR(128) CHARACTER SET LATIN NULL READ_ONLY
COMMAND_FUNCTION_CODE 実行されるSQL文を識別する番号。

正の値は、ISO/IEC 9075 SQL規格で定義されているSQL文用に予約されていますが、負の値はTeradataが定義したSQL文用に予約されています。

INTEGER 0 READ_ONLY
MORE SQL文の実行中に発生したすべての条件が診断域に格納されているかどうかを示すコード。
コード:
  • Nの場合、SQL文の実行中に発生したすべての条件が診断域に格納されています。
  • Yの場合、SQL文の実行中に、診断域にある条件域に格納しきれないより多くの条件が発生しました。
CHARACTER(1) CHARACTER SET LATIN N READ_ONLY
NUMBER この前のSQL文(ただし、この前のGET DIAGNOSTICS文は除く)の実行の結果、診断域に格納されている実行条件または完了条件の数。 INTEGER 0 READ_ONLY
ROW_COUNT 検索DELETEリクエスト、INSERTリクエスト、MERGEリクエスト、検索UPDATEリクエストの実行によって、または、この前のSQL文の実行の直接の結果、影響を受けた行数。 INTEGER 0 READ_ONLY
TRANSACTION_ACTIVE トランザクションが現在アクティブかどうかを示すコード。
コード:
  • 0の場合、トランザクションが現在アクティブではありません。
  • 1の場合、トランザクションが現在アクティブです。
INTEGER 0 READ_ONLY

次のテーブルに条件情報項目を示します。

フィールド 説明 データ型 デフォルト 属性
CLASS_ORIGIN RETURNED_SQLSTATEのクラス値を定義した命名権者の識別子。
コード:
  • ISO-9075 (ANSIにより定義)
  • Teradata (Teradataにより定義)
VARCHAR(128) CHARACTER SET UNICODE NULL SQLSTATE値に関連付けられていない条件名については修正可能。

この場合、値はISO-9075またはTeradata以外の任意の文字列にできます。

CONDITION_IDENTIFIER SIGNAL文またはRESIGNAL文で指定された条件名。 VARCHAR(128) CHARACTER SET UNICODE NULL READ_ONLY
CONDITION_NUMBER 診断域内の各条件情報項目(詳細)域を識別する連番。 INTEGER 0 READ_ONLY
MESSAGE_LENGTH MESSAGE_TEXT内の文字列値の文字数。 INTEGER 0 READ_ONLY
MESSAGE_TEXT RETURNED_SQLSTATEの値が、次のリストに示した項目のいずれかに対応する場合、MESSAGE_TEXTの値は、SQLが呼び出し、例外が発生したルーチンのメッセージ テキスト項目になります。
  • 外部ルーチン呼び出し例外
  • 外部ルーチン例外
  • SQLルーチン例外
  • 警告
VARCHAR(128) CHARACTER SET UNICODE NULL 修正可能
RETURNED_SQLSTATE これが唯一の完了条件、または例外条件だった場合に返されるSQLSTATEパラメータ。 CHARACTER(5) CHARACTER SET LATIN NULL READ_ONLY
SUBCLASS_ORIGIN RETURNED_SQLSTATEのサブクラス値を定義した命名権者の識別子。
コード:
  • ISO-9075 (ANSIにより定義)
  • Teradata (Teradataにより定義)
VARCHAR(128) CHARACTER SET UNICODE NULL SQLSTATE値に関連付けられていない条件名については修正可能。

この場合、値はISO-9075またはTeradata以外の任意の文字列にできます。

関連トピック

以下に関する詳細な情報
  • GET DIAGNOSTICS文については、GET DIAGNOSTICSを参照してください
  • RESIGNAL文については、RESIGNALを参照してください。
  • コマンド関数とそれに関連するコードについては、コマンド関数コード値を参照してください。