Documentation Home
MySQL 8.0 参考手册  / 第 13 章 SQL 语句  / 13.6 复合语句语法  / 13.6.7 条件处理  /  13.6.7.1 DECLARE ... CONDITION 语句

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 语句”)。

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

condition_valuefor DECLARE ... CONDITION指示与条件名称关联的特定条件或条件类别 。它可以采用以下形式:

  • mysql_error_code:表示 MySQL 错误代码的整数文字。

    不要使用 MySQL 错误代码 0,因为它表示成功而不是错误情况。有关 MySQL 错误代码的列表,请参阅服务器错误消息参考

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

    不要使用以 开头的 SQLSTATE 值, '00'因为这些值表示成功而不是错误情况。有关 SQLSTATE 值的列表,请参阅服务器错误消息参考

SIGNAL或 use 语句 中引用的条件名称 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;