gpt4 book ai didi

MySQL 事务返回错误

转载 作者:行者123 更新时间:2023-11-29 20:51:08 24 4
gpt4 key购买 nike

这是我编写的存储过程。当我在单个 sql 选项卡中运行 DELETEUPDATE

如:

DELETE FROM curriculumsubjects WHERE curriculumId = 27;
INSERT INTO curriculumsubjects(curriculumId,subjectCode)
VALUES(27,'MATH101');

它有效。它执行deleteinsert没有任何问题

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

CALL `enrollmentdb`.`updateCurriculumSubjects`(27, 'MATH101'); 

它返回我在ROLLBACK期间放入的'error'字符串

如果在没有存储过程 CALL 的情况下运行,那么当存储过程主体内的事务成功运行时,可能会导致事务失败?

这是存储过程。

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

顺便说一句,我正在使用 Mysql Workbench 6.3,我想做的是在再次插入之前删除所有与curriculumId匹配的列。

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

希望能帮到你。我只是找不到为什么 deleteinsert 如果放在事务中就不起作用的原因。

谢谢。

最佳答案

您编写的插入语法有一个错误p_subjCode,但您的输入变量是p_subjectCode,我将 bool 类型变量更改为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

关于MySQL 事务返回错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38038201/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com