以下事务运行没有问题。但是,一旦事务失败,例如列号不匹配,或者任何其他原因,它只会显示错误消息“'SQLWARNING: The request at Linux system time ${LINUX_SYSTEM_TIME} insert failed. Th data will被回滚'”,但没有错误消息显示实际的失败。我想知道是否有任何 MySQL 方法可以在 MySQL 事务中显示错误消息?谢谢。
delimiter //
CREATE PROCEDURE 123
BEGIN
DECLARE EXIT HANDLER FOR SQLWARNING
BEGIN
ROLLBACK;
SELECT 'SQLWARNING: The request at Linux system time ${LINUX_SYSTEM_TIME} insert failed. Th data will be rollbacked';
END;
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
ROLLBACK;
SELECT 'The request at Linux system time ${LINUX_SYSTEM_TIME} insert failed. Th data will be rollbacked';
END;
START TRANSACTION;
<do whatever we need in transaction>
COMMIT;
END //
CALL 123;
DROP PROCEDURE IF EXISTS
最佳答案
只是为了强调我从@@Solarflare 那里得到的答案。 Resignal 是一个简单的解决方案( MySQL exception handler access exception being handled ):
DECLARE EXIT HANDLER FOR SQLWARNING
BEGIN
ROLLBACK;
SELECT 'SQLWARNING: whatever error message';
RESIGNAL;
END;
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
ROLLBACK;
SELECT 'SQLWARNING: whatever error message;'
RESIGNAL;
END;
关于MySQL 事务没有返回足够的错误消息来帮助调试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44731775/