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语句”)。
条件声明必须出现在游标或处理程序声明之前。
该condition_value用于 DECLARE ... CONDITION指示特定条件或类的条件与状况名合伙人。它可以采用以下形式:
mysql_error_code:整数文字,指示MySQL错误代码。
不要使用MySQL错误代码0,因为这表示成功而不是错误情况。有关MySQL错误代码的列表,请参见第B.3.1节“服务器错误消息参考”。
SQLSTATE [VALUE] sqlstate_value:5个字符的字符串文字,指示SQLSTATE值。
不要使用以开头的SQLSTATE值, '00'因为它们表示成功而不是错误情况。有关SQLSTATE值的列表,请参见第B.3.1节“服务器错误消息参考”。
引用SIGNAL或使用 RESIGNAL语句中的条件名称 必须与SQLSTATE值关联,而不是与MySQL错误代码关联。
使用名称作为条件可以帮助使存储的程序代码更清晰。例如,此处理程序适用于尝试删除不存在的表的情况,但是只有当您知道1051是“ 未知表 ”的MySQL错误代码时,此处理程序才可见:
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;
这是相同条件的命名条件,但是基于相应的SQLSTATE值而不是MySQL错误代码:
DECLARE no_such_table CONDITION FOR SQLSTATE '42S02';
DECLARE CONTINUE HANDLER FOR no_such_table
BEGIN
-- body of handler
END;