診断域は、システムが管理するデータ構造で、その中にはSQLストアド プロシージャ内の文の実行ステータスに関する情報が含まれます。GET DIAGNOSTICS文を使用して、診断域から情報を取得できます。
- 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文の実行中に発生したすべての条件が診断域に格納されているかどうかを示すコード。 コード:
|
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 | トランザクションが現在アクティブかどうかを示すコード。 コード:
|
INTEGER | 0 | READ_ONLY |
次のテーブルに条件情報項目を示します。
フィールド | 説明 | データ型 | デフォルト | 属性 |
---|---|---|---|---|
CLASS_ORIGIN | RETURNED_SQLSTATEのクラス値を定義した命名権者の識別子。 コード:
|
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が呼び出し、例外が発生したルーチンのメッセージ テキスト項目になります。
|
VARCHAR(128) CHARACTER SET UNICODE | NULL | 修正可能 |
RETURNED_SQLSTATE | これが唯一の完了条件、または例外条件だった場合に返されるSQLSTATEパラメータ。 | CHARACTER(5) CHARACTER SET LATIN | NULL | READ_ONLY |
SUBCLASS_ORIGIN | RETURNED_SQLSTATEのサブクラス値を定義した命名権者の識別子。 コード:
|
VARCHAR(128) CHARACTER SET UNICODE | NULL | SQLSTATE値に関連付けられていない条件名については修正可能。 この場合、値はISO-9075またはTeradata以外の任意の文字列にできます。 |
関連トピック
- GET DIAGNOSTICS文については、GET DIAGNOSTICSを参照してください
- RESIGNAL文については、RESIGNALを参照してください。
- コマンド関数とそれに関連するコードについては、コマンド関数コード値を参照してください。