我搜索了整个网站寻找答案,但没有一个能解决我的问题,所以我要用一个新的线程来发布我的错误。
我的密码,

DELIMITER $$

USE `DB`$$

DROP PROCEDURE IF EXISTS `GET_Summary`$$

CREATE DEFINER=`connect`@`%` PROCEDURE `GET_Summary`(IN pDateFrom DATE,IN pDateTo DATE)

ROOT:BEGIN

    DECLARE pTotal,pShortCode,pSignUp,pUnSub,pJunk INT;
    DECLARE pCOM NVARCHAR(10);
    DECLARE no_more_rows BOOLEAN;

    CREATE TEMPORARY TABLE TMOMain
    (GrandTotal INT,ShortCode INT,COM NVARCHAR(10),SignUp INT,UnSub INT, Junk INT);

    DECLARE MoMainCur CURSOR FOR
    SELECT COUNT(*),shortcode,(CASE WHEN ComID= 1 THEN 'A'
    WHEN ComID= 2 THEN 'B' WHEN ComID= 3 THEN 'C' ELSE 'UV' END) AS COM
    FROM tbl_inbox
    INNER JOIN tbl_keyword ON keywordid = recvkeyword
    WHERE recvDate >='2011-11-15'  AND recvDate < '2011-11-16'
    GROUP BY shortcode,COM;

    DECLARE CONTINUE HANDLER FOR NOT FOUND
    SET no_more_rows = TRUE;

    OPEN MoMainCur;

    read_loop:LOOP
    FETCH MoMainCur INTO pTotal,pShortCode,pCOM ;

    INSERT INTO TMOMain
    VALUES
    (pTotal,pShortcode,pCOM ,0,0,0);
    IF no_more_rows THEN
        CLOSE MoMainCur;
        LEAVE the_loop;

    END LOOP;

    -- CLOSE MoMain;

    SELECT * FROM TMOMain;
    END$$
DELIMITER ;

MYSQL 5.1版
错误消息:
您的SQL语法有错误;请查看与MySQL服务器版本相对应的手册,以获取在“DECLARE MoMainCur CURSOR for

最佳答案

fine manual开始:
DECLARE只允许在BEGIN ... END复合语句中使用,并且必须在其开始处,在任何其他语句之前。
声明必须遵循一定的顺序。在声明处理程序之前必须声明游标。在声明游标或处理程序之前,必须声明变量和条件。
强调我的。
CREATE TEMPORARY TABLE TMOMain移动到所有DECLAREs之后。

关于mysql - 在存储过程中使用游标的语法错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8192091/

10-14 13:56
查看更多