MySQL Transaction返回错误

时间:2016-06-26 11:46:07

标签: mysql sql database transactions

所以这里是我写的存储过程。当我在单个sql选项卡中运行int sdk = android.os.Build.VERSION.SDK_INT; if(sdk < android.os.Build.VERSION_CODES.JELLY_BEAN) { setBackgroundDrawable(); } else { setBackground(); } DELETE

为:

UPDATE

它有效。它执行DELETE FROM curriculumsubjects WHERE curriculumId = 27; INSERT INTO curriculumsubjects(curriculumId,subjectCode) VALUES(27,'MATH101'); delete没有任何问题

但是如果我将存储过程称为:

insert

它会返回我在CALL `enrollmentdb`.`updateCurriculumSubjects`(27, 'MATH101');

期间输入的'error'字符串

如果在没有存储过程ROLLBACK的情况下运行成功运行,可能导致存储过程体内的事务失败?

这是存储过程。

CALL

顺便说一下,我使用的是Mysql Workbench 6.3,我尝试做的是删除所有匹配CurriculumId的列,然后再插入。

在Java上,我将迭代调用存储过程以进行多次插入。

我希望你能提供帮助。我无法找到CREATE DEFINER=`root`@`localhost` PROCEDURE `updateCurriculumSubjects`(IN p_curriculumId int, IN p_subjectCode varchar(100)) BEGIN DECLARE hasError BOOLEAN DEFAULT 0; DECLARE CONTINUE HANDLER FOR sqlexception SET hasError = 1; START TRANSACTION; DELETE FROM curriculumsubjects WHERE curriculumId = p_curriculumId; INSERT INTO curriculumsubjects(curriculumId,subjectCode) VALUES(p_curriculumId,p_subjCode); IF hasError THEN ROLLBACK; SELECT 'error'; ELSE COMMIT; END IF; END delete如果放入交易中而无法工作的原因。

感谢。

1 个答案:

答案 0 :(得分:0)

您的插入语法中只有一个错误,您编写 p_subjCode ,但您的输入变量是 p_subjectCode ,我将布尔类型变量更改为tinyint(1)以获取更多信息版本支持。

CREATE DEFINER=`root`@`localhost` PROCEDURE `updateCurriculumSubjects`(IN p_curriculumId int, IN p_subjectCode varchar(100))
BEGIN
DECLARE hasError TINYINT(1) DEFAULT 0;
DECLARE CONTINUE HANDLER FOR sqlexception SET hasError = 1;
START TRANSACTION;
    DELETE FROM curriculumsubjects WHERE curriculumId = p_curriculumId;
    INSERT INTO curriculumsubjects(curriculumId,subjectCode)
                            VALUES(p_curriculumId,p_subjectCode);

IF hasError=1 THEN
    ROLLBACK;
    SELECT 'error';
ELSE
    COMMIT;

END IF;
END