我对 MySQL 中的存储过程
还很陌生,但借助谷歌和文档的力量,我终于完成了(某种程度上)我的第一个过程。
CREATE DEFINER=`root`@`localhost` PROCEDURE `modules`()
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE team_id INT;
DECLARE phase_id INT;
DECLARE module_id INT;
DECLARE user_id INT;
DECLARE cur1 CURSOR FOR SELECT P.team_id,P.id,M.id,UHT.user_id FROM phase P INNER JOIN module M ON P.Module_id = M.id JOIN user_has_team UHT ON UHT.team_id = P.team_id WHERE M.module_type = 7 or M.module_type = 8 AND P.end <= NOW();
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cur1;
read_loop: LOOP
FETCH cur1 INTO team_id, phase_id,module_id, user_id;
IF done THEN
LEAVE read_loop;
END IF;
INSERT INTO offline_score VALUES (null,team_id,phase_id,module_id,1,NOW(),1);
END LOOP;
END
现在我想测试我的创作并执行了以下操作
CALL modules
但是,在检查我的 offline_score
表后,我发现没有插入任何内容。
谁能看看我的代码是否有问题,或者知道我如何调试才能找到错误?
调用后我得到以下输出:
1 14:36:24 CALL modules 0 row(s) affected, 1 warning(s): 1329 No data - zero rows fetched, selected, or processed
最佳答案
我不知道您的数据是什么样的,但此查询可能是一个问题:
SELECT P.team_id,P.id,M.id,UHT.user_id FROM phase P
INNER JOIN module M ON P.Module_id = M.id
JOIN user_has_team UHT ON UHT.team_id = P.team_id
WHERE M.module_type = 7 or M.module_type = 8 AND P.end <= NOW();
尝试将 where
更改为
WHERE M.module_type = 7 or ( M.module_type = 8 AND P.end <= NOW());
或
WHERE ( M.module_type = 7 or M.module_type = 8) AND P.end <= NOW();
根据您的需求
关于mysql程序错误无法运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26675071/