Почему этот код не улавливает ошибку при попытке удалить строку, которая не существует? Независимо от того, какой параметр я передаю как имя строки, он всегда возвращает «1 строка удалена» и не использует обработчики вывода. которые должны поймать только этот тип ошибки.Ошибка MySQL в ошибке
USE yoga;
DROP PROCEDURE IF EXISTS delete_warmup;
DELIMITER //
CREATE PROCEDURE delete_warmup
(
warmup_name_param VARCHAR(100)
)
BEGIN
DECLARE row_not_found TINYINT DEFAULT FALSE;
DECLARE sql_exception TINYINT DEFAULT FALSE;
BEGIN
DECLARE EXIT HANDLER FOR 1329
SET row_not_found = TRUE;
DECLARE EXIT HANDLER FOR SQLEXCEPTION
SET sql_exception = TRUE;
DELETE FROM warmup
WHERE warmup_name = warmup_name_param;
SELECT '1 row was deleted.' AS message;
END;
IF row_not_found = TRUE THEN
SELECT 'Row not deleted - row not found' AS message;
ELSEIF sql_exception = TRUE THEN
SHOW ERRORS;
END IF;
END//
DELIMITER ;
CALL delete_warmup ('Monkey business');
Спасибо за ваш ответ. Я пробовал это с NOT FOUND, а также с кодами ошибок 1011, 1017, 1032, 1065 и 1329. Когда я размещаю обработчики вывода во внешнем BEGIN/END (вместо вложенного BEGIN/END), процедура не работает вообще, независимо от того, существует или нет строка. –