13.6.7.1 DECLARE ... CONDITION 声明

DECLARE condition_name CONDITION FOR condition_value

condition_value: {
    mysql_error_code
  | SQLSTATE [VALUE] sqlstate_value
}

声明...条件语句声明一个命名错误条件,将名称与需要特定处理的条件相关联。可以在随后的声明...处理程序语句中引用该名称(请参见第 13.6.7.2 节“ DECLARE ... HANDLER 语句”)。

条件声明必须出现在游标或处理程序声明之前。

声明...条件的* condition_value *table 示要与条件名称关联的特定条件或条件类别。它可以采用以下形式:

    • mysql_error_code *:table 示 MySQL 错误代码的整数 Literals。

不要使用 MySQL 错误代码 0,因为这 table 示成功而不是错误情况。有关 MySQL 错误代码的列 table,请参见第 B.3.1 节“服务器错误消息参考”

  • SQLSTATE [VALUE] * sqlstate_value *:5 个字符的字符串 Literals,指示 SQLSTATE 值。

不要使用以'00'开头的 SQLSTATE 值,因为这些值 table 示成功而不是错误情况。有关 SQLSTATE 值的列 table,请参见第 B.3.1 节“服务器错误消息参考”

SIGNAL或 use RESIGNAL语句中引用的条件名称必须与 SQLSTATE 值关联,而不是与 MySQL 错误代码关联。

使用条件名称可以帮助使存储的程序代码更清晰。例如,此处理程序适用于尝试删除不存在的 table 的情况,但是只有当您知道 1051 是“未知 table”的 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;