2014-03-27 72 views
0

我試圖在存儲過程中聲明帶有多個連接的遊標。查詢在存儲過程之外完美運行,但存儲過程在遊標聲明處給我一個錯誤,聲稱存在語法錯誤。帶有多個連接的MySQL遊標聲明

DROP PROCEDURE IF EXISTS getCheaters; 
DELIMITER $$ 
CREATE PROCEDURE getCheaters() 
BEGIN 

DECLARE id INT (11); 
DECLARE first_name VARCHAR (255); 
DECLARE last_name VARCHAR(255); 
DECLARE file_name VARCHAR(255); 

DECLARE no_more_rows BOOLEAN; 
DECLARE loop_cntr INT DEFAULT 0; 
DECLARE num_rows INT DEFAULT 0; 

DECLARE userCursor FOR 
    SELECT last_name, first_name, users.id 
    FROM users JOIN documents ON (users.id = documents.user_id) 
    JOIN licenses ON (licenses.user_id = users.id) 
    WHERE multi_user_license_id IS NULL 
    GROUP BY last_name, first_name 
    HAVING count(documents.title) > 60; 


DECLARE CONTINUE HANDLER FOR NOT FOUND 
    SET no_more_rows = TRUE; 

OPEN userCursor; 
SELECT FOUND_ROWS() INTO num_rows; 

read_loop: LOOP 
    /*Do stuff*/ 
    IF no_more_rows THEN 
     CLOSE userCursor; 
     LEAVE read_loop; 
    END IF; 
    SET loop_cntr = loop_cntr + 1; 
END LOOP; 

END $$ 
DELIMITER; 

而且我得到錯誤1064(42000):您的SQL語法錯誤;檢查與您的MySQL服務器版本相對應的手冊,以找到在第1行'DELIMITER'附近使用的正確語法。 錯誤1064(42000):您的SQL語法錯誤;查看與您的MySQL服務器版本相對應的手冊,查看'FOR (SELECT last_name,first_name,users.id 012 FROM users JOIN docu'at line 13

是否有人看到我的錯誤在哪裏?

回答

0

變化:

... 
DECLARE userCursor FOR 
... 

由:

... 
DECLARE userCursor CURSOR FOR 
... 

SQL Fiddle demo

+0

謝謝!知道這是我過去看的一些愚蠢的東西。 – ginc