Spec-Zone .ru
спецификации, руководства, описания, API

13.6.7.1. DECLARE ...CONDITION Синтаксис

DECLARE condition_name CONDITION FOR condition_valuecondition_value:    mysql_error_code  | SQLSTATE [VALUE] sqlstate_value

DECLARE ... CONDITION оператор объявляет именованное состояние ошибки, связывая имя с условием, которое нуждается в определенной обработке. Имя может быть упомянуто в последующем DECLARE ... HANDLER оператор (см. Раздел 13.6.7.2,"DECLARE ... HANDLER Синтаксис").

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

condition_value для DECLARE ... CONDITION может быть код ошибки MySQL (число) или значение SQLSTATE (5-символьный строковый литерал). Недопустимо использовать код ошибки MySQL 0 или значения SQLSTATE, которые начинаются '00', потому что те указывают на успех, а не состояние ошибки. Для списка кодов ошибки MySQL и значений SQLSTATE, см. Раздел C.3, "Коды ошибки сервера и сообщения".

Используя имена для условий может помочь сделать сохраненный код программы более четким. Например, этот обработчик применяется к попыткам отбросить несуществующую таблицу, но это очевидно, только если Вы знаете значение кода ошибки MySQL 1051:

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;

Имена условия, упомянутые в SIGNAL или используйте RESIGNAL операторы должны быть связаны со значениями SQLSTATE, не кодами ошибки MySQL.