提问人:Donavon Lerman 提问时间:9/8/2023 更新时间:9/8/2023 访问量:79
MySQL:在存储过程中使用事务、GET DIAGNOSTICS 和 SQLEXCEPTION SET 的正确方法
MySQL: Proper way to use transactions, GET DIAGNOSTICS, & SQLEXCEPTION SET in a Stored Procedure
问:
我正在尝试在MySQL中创建一个存储过程,使用事务来捕获错误,显示错误,并在没有错误的情况下回滚或提交。这就是我想出的。它不显示错误或事务失败的原因。有什么建议吗?
Delimiter //
DROP PROCEDURE IF EXISTS TMP_SP_RunSQL //
CREATE PROCEDURE TMP_SP_RunSQL()
SP: BEGIN
DECLARE `_rollback` BOOL DEFAULT 0;
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET `_rollback` = 1;
/* Check Current Version of DB */
IF TRUE THEN
START TRANSACTION;
/* This should cause an error. The `test` column has already been dropped */
ALTER TABLE `Test`
DROP COLUMN `test`;
IF `_rollback` THEN
GET DIAGNOSTICS CONDITION 1 @errorMessage = MESSAGE_TEXT;
SELECT @errorMessage AS Message;
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = @errorMessage;
ROLLBACK;
SELECT 'The database update failed' AS Message;
ELSE
COMMIT;
SELECT 'The database update succeeded' AS Message;
END IF;
ELSE
SELECT 'TMP_FN_CheckLkpVersion failed' AS Message;
END IF;
END //
DELIMITER ;
CALL TMP_SP_RunSQL();
DROP PROCEDURE IF EXISTS TMP_SP_RunSQL;
我创建了上述过程来获取诊断条件,并在其中放入一个名为 @errorMessage 然后显示该变量。
我期待看到:错误 1091,无法删除“测试”;检查列/键是否存在。
答: 暂无答案
下一个:在 Flyway 中回滚
评论