Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 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节,“DECLARE ... HANDLER 语句”)。

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

condition_valueDECLARE ... CONDITION 中表示要关联的特定条件或条件类别。它可以以以下形式出现:

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

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

  • SQLSTATE [VALUE] sqlstate_value:一个 5 个字符字面量,表示 SQLSTATE 值。

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

SIGNALRESIGNAL 语句中引用的条件名称必须与SQLSTATE值相关,而不是MySQL错误代码。

使用条件名称可以使存储程序代码更加清晰。例如,这个处理器应用于尝试删除不存在的表,但只有知道1051是MySQL错误代码“unknown table”才能明确:

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;