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.