GET DIAGNOSTICS ステートメント

GET DIAGNOSTICS ステートメントは、以前に実行した (GET DIAGNOSTICS ステートメント以外の) SQL ステートメントに関する情報を含む、現在の実行環境情報を取得するために使用します。GET DIAGNOSTICS ステートメントにより使用可能になる情報の中には、SQLCA 内でも使用可能なものがあります。

呼び出し

このステートメントは、以下の対象に組み込むことができます。
  • SQL プロシージャー定義
  • コンパウンド SQL (コンパイル済み) ステートメント
  • コンパウンド SQL (インライン化) ステートメント
コンパウンド・ステートメントは、SQL プロシージャー定義、SQL 関数定義、または SQL トリガー定義に組み込むことができます。 このステートメントは実行可能ステートメントではなく、動的に準備することはできません。

許可

必要ありません。

構文

構文図を読む構文図をスキップするGET DIAGNOSTICSstatement-informationcondition-information
statement-information
構文図を読む構文図をスキップする SQL-variable-1= DB2_RETURN_STATUSDB2_SQL_NESTING_LEVELROW_COUNT
condition-information
構文図を読む構文図をスキップするEXCEPTION1,SQL-variable-2=DB2_TOKEN_STRINGMESSAGE_TEXT

説明

statement-information
最後に実行された SQL ステートメントに関する情報を戻します。
SQL-variable-1
割り当てのターゲットとなる変数を識別します。 変数は、グローバル変数であってはなりません。 SQL 変数はコンパウンド・ステートメントで定義できます。変数のデータ・タイプには、表 1 で指定されているようなデータ・タイプとの互換性がなければなりません。
Db2_RETURN_STATUS
直前に実行された SQL ステートメントが、 状況を戻すプロシージャーを呼び出す CALL ステートメントの場合に、 そのステートメントに関連するプロシージャーから戻される状況値を識別します。 直前のステートメントがそのようなステートメントでなければ、 戻される値は特に意味のない、何らかの整数です。
Db2_SQL_NESTING_LEVEL
GET DIAGNOSTICS ステートメントが実行されたときに有効になっていたネストまたは再帰の現行レベルを識別します。 ネストの各レベルは、コンパイル済み SQL 関数、コンパイル済み SQL プロシージャー、コンパイル済みトリガー、または動的に準備された複合 SQL (コンパイル済み) ステートメントのネストされた、または再帰的な呼び出しに対応します。 GET DIAGNOSTICS ステートメントがネストのレベル外で実行される場合、値ゼロが戻されます。 このオプションは、コンパイル済み SQL 関数、コンパイル済み SQL プロシージャー、コンパイル済みトリガー、または複合 SQL (コンパイル済み) ステートメントのコンテキストでのみ指定できます (SQLSTATE 42601)。
ROW_COUNT
直前の SQL ステートメントに関連する行数を識別します。 直前の SQL ステートメントが DELETE、INSERT、または UPDATE ステートメントである場合、 ROW_COUNT は、操作対象の行数を識別します。 直前のステートメントが PREPARE ステートメントの場合、ROW_COUNT は、 準備済みステートメントの結果行の見積もり数を識別します。
condition-information
以前に実行した SQL ステートメントのエラー情報または警告情報が戻されることを指定します。 エラーについての情報が必要であれば、GET DIAGNOSTICS ステートメントは、 エラーを処理するハンドラーに指定された最初のステートメントでなければなりません。 警告についての情報が必要で、ハンドラーが警告条件を制御している場合は、 GET DIAGNOSTICS ステートメントは、そのハンドラーに指定された最初のステートメントでなければなりません。 ハンドラーが警告条件を制御していない 場合、 GET DIAGNOSTICS ステートメントは、実行される次のステートメントでなければなりません。 このオプションは、SQL プロシージャーのコンテキスト内にのみ指定できます (SQLSTATE 42601)。
SQL-variable-2
割り当てのターゲットとなる変数を識別します。 変数は、グローバル変数であってはなりません。 SQL 変数はコンパウンド・ステートメントで定義できます。変数のデータ・タイプには、表 1 で指定されているようなデータ・タイプとの互換性がなければなりません。
Db2_TOKEN_STRING
以前に実行された SQL ステートメントから戻されたエラーまたは警告メッセージ・トークンを示します。 ステートメントがゼロの SQLCODE で完了したか、SQLCODE にトークンがない場合、 VARCHAR 変数には空ストリングが戻され、CHAR 変数にはブランクが戻されます。
MESSAGE_TEXT
以前に実行された SQL ステートメントから戻されたエラーまたは警告メッセージ・テキストを示します。 このメッセージ・テキストは、そのステートメントが処理されたデータベース・サーバーの言語で戻されます。 ステートメントがゼロの SQLCODE で完了した場合、VARCHAR 変数には空ストリングが戻され、 CHAR 変数にはブランクが戻されます。

  • GET DIAGNOSTICS ステートメントは、診断域の内容の変更は行いません (SQLCA)。 SQLSTATE または SQLCODE 特殊変数が SQL プロシージャーで宣言されている場合、 GET DIAGNOSTICS ステートメントの発行によって戻される SQLSTATE または SQLCODE に設定されます。
  • 項目のデータ・タイプ: 以下の表に、各診断項目の SQL データ・タイプを示します。診断項目が変数に割り当てられる際、変数のデータ・タイプに、要求される診断項目のデータ・タイプとの互換性がなければなりません。
    表 1. GET DIAGNOSTICS 項目のデータ・タイプ
    情報のタイプ 項目 データ・タイプ
    ステートメント情報 DB2_RETURN_STATUS INTEGER
    ステートメント情報 Db2_SQL_NESTING_LEVEL INTEGER
    ステートメント情報 ROW_COUNT DECIMAL(31,0)
    条件情報 Db2_TOKEN_STRING VARCHAR(1000)
    条件情報 MESSAGE_TEXT VARCHAR(32672)

  • 例 1: SQL プロシージャーで GET DIAGNOSTICS ステートメントを実行し、更新された行数を判別します。
    CREATE PROCEDURE sqlprocg (IN deptnbr VARCHAR(3))
       LANGUAGE SQL
       BEGIN
          DECLARE SQLSTATE CHAR(5);
          DECLARE rcount INTEGER;
          UPDATE CORPDATA.PROJECT
             SET PRSTAFF = PRSTAFF + 1.5
             WHERE DEPTNO = deptnbr;
          GET DIAGNOSTICS rcount = ROW_COUNT;
    -- この時点で、rcount には更新済みの行数が入っています。
    ...
       END
  • 例 2: SQL プロシージャー内で TRYIT というプロシージャーの呼び出しから戻される状況値を処理します。 この呼び出しでは、ユーザー障害を示す正の値が明示的に戻されるか、 あるいは SQL エラーが発生して負の戻り状況値が戻されます。 プロシージャーが成功すると、ゼロの値が戻されます。
    CREATE PROCEDURE TESTIT ()
       LANGUAGE SQL
       A1:BEGIN
          DECLARE RETVAL INTEGER DEFAULT 0;
          ...
          CALL TRYIT;
          GET DIAGNOSTICS RETVAL = Db2_RETURN_STATUS;
          IF RETVAL <> 0 THEN
             ...
             LEAVE A1;
          ELSE
             ...
          END IF;
       END A1