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

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

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

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

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

Db2® は、ステートメントが実行されるたびに、これらの変数を暗黙的に設定します。 ハンドラーを用意された条件がステートメントによって生じた場合、 ハンドラーの実行の開始時点で SQLSTATE および SQLCODE 変数の値を利用することができます。 ただしこの変数は、ハンドラー内の最初のステートメントが実行されるとただちにリセットされます。 そのため、 ハンドラーの最初のステートメント内のローカル変数に SQLSTATE および SQLCODE の値をコピーしておくのが一般的な措置です。 以下の例では、任意の条件に対する CONTINUE ハンドラーを使用して、SQLCODE 変数を retcodeという名前の別の変数にコピーします。 次に実行可能ステートメント内で変数 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' に設定します。