2
爲什麼當我嘗試刪除不存在的行時,此代碼沒有捕捉到錯誤?無論我將哪個參數作爲行的名稱傳入,它總是返回「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)中時,該過程不起作用根本不管行是否存在。 – 2013-03-25 11:13:37