Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 26.8Mb
PDF (A4) - 26.9Mb
HTML Download (TGZ) - 7.1Mb
HTML Download (Zip) - 7.2Mb


13.6.7.1 DECLARE ... CONDITION 構文

DECLARE condition_name CONDITION FOR condition_value

condition_value:
    mysql_error_code
  | SQLSTATE [VALUE] sqlstate_value

DECLARE ... CONDITION ステートメントは名前付きエラー条件を宣言し、特定の処理が必要な条件に名前を関連付けます。この名前は、以降の DECLARE ... HANDLER ステートメントで参照できます (セクション13.6.7.2「DECLARE ... HANDLER 構文」を参照してください)。

条件宣言は、カーソルまたはハンドラ宣言の前に指定する必要があります。

DECLARE ... CONDITIONcondition_value は、MySQL エラーコード (番号) または SQLSTATE 値 (5 文字の文字列リテラル) にすることができます。MySQL エラーコード 0 または '00' で始まる SQLSTATE 値は、エラー条件ではなく成功を示すため、使用すべきではありません。MySQL エラーコードおよび SQLSTATE 値のリストについては、セクションB.3「サーバーのエラーコードおよびメッセージ」を参照してください。

条件に名前を使用すると、ストアドプログラムのコードの明確化に役立つ場合があります。たとえば、次のハンドラは存在しないテーブルを削除しようとする試みに適用されますが、それが明らかなのは MySQL エラーコード 1051 の意味がわかっている場合だけです。

DECLARE CONTINUE HANDLER FOR 1051
  BEGIN
    -- body of handler
  END;

条件の名前を宣言することによって、このハンドラの目的がより簡単にわかるようになります。

DECLARE no_such_table CONDITION FOR 1051;
DECLARE CONTINUE HANDLER FOR no_such_table
  BEGIN
    -- body of handler
  END;

これは、同じ条件の、MySQL エラーコードではなく、対応する SQLSTATE 値に基づく名前付き条件です。

DECLARE no_such_table CONDITION FOR SQLSTATE '42S02';
DECLARE CONTINUE HANDLER FOR no_such_table
  BEGIN
    -- body of handler
  END;

SIGNAL で参照されるか、または RESIGNAL ステートメントで使用される条件名は MySQL エラーコードではなく、SQLSTATE 値に関連付けられている必要があります。


User Comments
User comments in this section are, as the name implies, provided by MySQL users. The MySQL documentation team is not responsible for, nor do they endorse, any of the information provided here.
Sign Up Login You must be logged in to post a comment.