Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 Reference Manual  /  ...  /  DECLARE ... CONDITION Statement

15.6.7.1 声明... 条件语句

DECLARE condition_name CONDITION FOR condition_value

condition_value: {
    mysql_error_code
  | SQLSTATE [VALUE] sqlstate_value
}

DECLARE ... CONDITION 语句声明了一个命名的错误条件,关联一个名称与需要特殊处理的条件。该名称可以在后续的 DECLARE ... HANDLER 语句中引用(见 第 15.6.7.2 节,“声明... 处理语句”)。

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

condition_value 对于 DECLARE ... CONDITION 指示要关联的特定条件或条件类别。它可以采取以下形式:

  • mysql_error_code:一个整数文字,表示 MySQL 错误代码。

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

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

    请勿使用以 '00' 开头的 SQLSTATE 值,因为它们表示成功,而不是错误条件。有关 SQLSTATE 值的列表,请参阅 服务器错误消息参考

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;