【问题标题】:MySQL cursor declaration with multiple joins具有多个连接的 MySQL 游标声明
【发布时间】:2014-03-27 20:46:02
【问题描述】:

我试图在存储过程中声明一个具有多个连接的游标。查询在存储过程之外完美运行,但存储过程在游标声明处给我一个错误,声称存在语法错误。

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;

我得到 ERROR 1064 (42000): You have an error in your SQL syntax;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“DELIMITER”附近使用正确的语法 ERROR 1064 (42000):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在“FOR”附近使用的正确语法 (选择姓氏,名字,users.id FROM users JOIN docu' 在第 13 行

有人知道我的错误在哪里吗?

【问题讨论】:

    标签: mysql stored-procedures cursor syntax-error


    【解决方案1】:

    变化:

    ...
    DECLARE userCursor FOR
    ...
    

    作者:

    ...
    DECLARE userCursor CURSOR FOR
    ...
    

    SQL Fiddle demo

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-31
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-22
      相关资源
      最近更新 更多