#### 13.6.7.1 DECLARE ... CONDITION 声明

[](<>)

```
DECLARE condition_name CONDITION FOR condition_value

condition_value: {
    mysql_error_code
  | SQLSTATE [VALUE] sqlstate_value
}
```

这[`声明...条件`](declare-condition.html)语句声明了一个命名的错误条件，将名称与需要特定处理的条件相关联。这个名字可以在后面引用[`声明...处理程序`](declare-handler.html)声明（见[第 13.6.7.2 节，“DECLARE ... HANDLER 语句”](declare-handler.html)）。

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

这*`条件值`*为了[`声明...条件`](declare-condition.html)指示要与条件名称相关联的特定条件或条件类别。它可以采取以下形式：

-   *`mysql_error_code`*: 表示 MySQL 错误代码的整数文字。

    不要使用 MySQL 错误代码 0，因为这表示成功而不是错误条件。有关 MySQL 错误代码的列表，请参阅[服务器错误消息参考](https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html).

-   SQLSTATE[价值] *`sqlstate_value`*: 一个 5 字符的字符串文字，指示 SQLSTATE 值。

    不要使用以`'00'`因为那些表示成功而不是错误情况。有关 SQLSTATE 值的列表，请参见[服务器错误消息参考](https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html).

    中提到的条件名称[`信号`](signal.html)或使用[`重新信号`](resignal.html)语句必须与 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;
```
