SQL プロシージャーでの SQLCODE および SQLSTATE 変数

SQLCODE 変数と SQLSTATE 変数を使用して、SQL プロシージャーの実行中に発生することがあるエラー・メッセージとコードを表示することができます。

エラー処理を実行したり、SQL プロシージャーのデバッグを支援したりするために、SQLCODE または SQLSTATE の値を検査すると便利な場合があります。 これらの値は、出力パラメーターまたは診断メッセージ・ストリングの一部として返すことができ、またこれらの値を任意の表に挿入して基本的なトレース・サポートを提供することもできます。

SQL プロシージャー中の SQLCODE および SQLSTATE 値を使用するには、SQL プロシージャー本体で以下のような SQL 変数を宣言する必要があります。

   DECLARE SQLCODE INTEGER DEFAULT 0;
   DECLARE SQLSTATE CHAR(5) DEFAULT '00000';

ステートメントが実行されると Db2® は常にこれらの変数を暗黙で設定します。 ハンドラーを用意された条件がステートメントによって生じた場合、 ハンドラーの実行の開始時点で SQLSTATE および SQLCODE 変数の値を利用することができます。 ただしこの変数は、ハンドラー内の最初のステートメントが実行されるとただちにリセットされます。 そのため、 ハンドラーの最初のステートメント内のローカル変数に SQLSTATE および SQLCODE の値をコピーしておくのが一般的な措置です。 以下の例では、すべての条件で CONTINUE ハンドラーが使用されて、 retcode という別の変数に SQLCODE 変数がコピーされます。 次に実行可能ステートメント内で変数 retcode を使用して、 プロシージャー・ロジックを制御したり、 出力パラメーターとして値を返したりすることができます。

BEGIN 
  DECLARE SQLCODE INTEGER DEFAULT 0;
  DECLARE retcode INTEGER DEFAULT 0;
  
  DECLARE CONTINUE HANDLER FOR SQLEXCEPTION, SQLWARNING, NOT FOUND
     SET retcode = SQLCODE;

  executable-statements
END
注: SQL プロシージャーで SQLCODE または SQLSTATE 変数をアクセスする場合には、Db2 によって、後続するステートメントの SQLCODE 値は 0、また SQLSTATE 値は‘00000' に設定されます。