mysql程序错误无法运行

标签 mysql stored-procedures

我对 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/

相关文章:

php - mysql 数据库中的复选框值

mysql - 如何在mysql存储过程中声明变量?

mysql - 在存储过程中使用mysql事务

mongodb - 如何: $merge and On-Demand-Materialized views

SQL - 从数据库中选择最多 'active' 时间

sql - 语句 'for update' 是如何工作的?

php - 为什么第二个连接在我的查询中不起作用?

mysql - 以日期时间格式查询值的某些部分

MySQL查询将行插入到列中没有特定值的表中

mysql - 使用 'in' 查找两个值的 join 函数