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.