【发布时间】:2016-11-25 21:21:00
【问题描述】:
在 mysql 存储过程的事务中返回错误原因的最佳方法是什么?
这是我创建的一个存储过程。但是我注意到,如果我在语法上犯了错误,例如我忘记将 WHERE 子句放在 update 语句之一中,它只会返回 SELECT 'error' 而不是错误的实际原因发生了。
有没有更好的方法来捕捉错误,就像在你刚刚放置的 Java 中一样
catch(SQLException e){
JOptionPane.showMessageDialog(null,e.getError()+"\n"+e.getMessage() );
}
如果有任何示例或最佳做法,我将不胜感激。
CREATE DEFINER=`root`@`localhost` PROCEDURE `updateCurriculumDetails`(p_curriculumId INT, p_editedByUserId INT, p_curriculumName varchar(50), p_description VARCHAR(200), p_gradeLevelId INT, p_schoolYearId INT)
BEGIN
DECLARE hasError BOOLEAN DEFAULT 0;
DECLARE CONTINUE HANDLER FOR sqlexception SET hasError = 1;
START TRANSACTION;
UPDATE curriculum_dt c
SET c.`name` = p_curriculumName,
c.description = p_description,
c.gradeLevelId = p_gradeLevelId
WHERE c.id = p_curriculumId;
UPDATE curriculum_schoolyears_dt cs
SET cs.schoolYearId = p_schoolYearId
WHERE cs.curriculumId = p_curriculumId;
UPDATE curriculum_hd SET editedBy_UserId = p_editedByUserId,
dateLastEdited = NOW()
WHERE curriculumId = p_curriculumId;
IF hasError THEN
ROLLBACK;
SELECT 'error';
ELSE
COMMIT;
SELECT 'successfully updated' AS result;
END IF;
END
提前致谢。
【问题讨论】:
标签: mysql sql exception-handling transactions