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 ... CONDITION
の condition_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 値に関連付けられている必要があります。