这是我想做的事情的示例。 当查询中存在 LIMIT 时,存储过程无法创建。 如果我取消程序创建的限制。
CREATE PROCEDURE LimitTest(IN in_start INTEGER UNSIGNED, IN in_limit INTEGER UNSIGNED)
BEGIN
DECLARE no_more_results INTEGER DEFAULT 0;
DECLARE var_result INTEGER UNSIGNED;
DECLARE row CURSOR FOR SELECT id from test LIMIT in_start,in_limit;
DECLARE CONTINUE HANDLER FOR NOT FOUND
SET no_more_results = 1;
OPEN row;
FETCH row INTO var_result;
REPEAT
INSERT INTO results VALUES(var_result);
FETCH row INTO var_result;
UNTIL no_more_results = 1
END REPEAT;
CLOSE row;
END
最佳答案
问题是 limit 后面的数字必须是常量,不能是 this bug report 规定的参数。在 MySQL 的更高版本中仍未修复。您可以尝试(丑陋的)解决方法 outlined here :-
CREATE PROCEDURE sp (
IN LimitStart_ INT,
IN LimitCnt_ INT
)
BEGIN
SET @lim = CONCAT(' LIMIT ', LimitStart_, ',', LimitCnt_);
SET @q = "SELECT mycol FROM mytable";
SET @q = CONCAT(@q, @lim);
PREPARE st FROM @q;
EXECUTE st;
DEALLOCATE PREPARE st;
END;
关于sql - 如何向 mysql 5 存储过程中运行的查询传递限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1330005/