Spec-Zone.ru › MySQL 9.2

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 [ЗНАЧЕНИЕ] sqlstate_value: Строковая константа длиной 5 символов, указывающая значение SQLSTATE.

    Не используйте значения SQLSTATE, начинающиеся с '00', так как они указывают на успех, а не на условие ошибки. Список значений 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;

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/declare-condition.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API