Spec-Zone.ru › MySQL 5.7

13.6.7.1 ОПРЕДЕЛЕНИЕ ... УСЛОВИЯ Заявление

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 Statement»).

Объявления условий должны предшествовать объявлениям курсоров или обработчиков.

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-5.7-en/declare-condition.html

Spec-Zone.ru

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