2014-10-31 38 views
0

我對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 
+0

您是否收到任何錯誤?如果沒有,您嘗試手動執行您在過程中查看它是否返回一些數據的查詢。另外'end'是你在查詢中使用的保留關鍵字,確保使用反引號。 – 2014-10-31 12:58:31

+0

我得到以下輸出: 12:46:59 \t CALL模塊\t 30行(s)返回 – 2014-10-31 13:25:23

回答

1

我不知道你的數據是什麼樣子,但此查詢可能是一個問題:

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(); 

取決於您的需求