如何使用过程输入的限制

时间:2011-07-10 10:15:38

标签: mysql stored-procedures limit

我想在限制中使用pollNo,但它会出错:

  

错误:脚本行:4你有一个   SQL语法错误;检查   与您的MySQL对应的手册   用于正确语法的服务器版本   在'pollNo,1)附近使用作为A连接   A.id = poll_data.poll_id;

上的poll_data      第6行

END'

DELIMITER $$

DROP PROCEDURE IF EXISTS `prj`.`ret_poll` $$
CREATE PROCEDURE `prj`.`ret_poll` (IN pollNo int)
BEGIN
select * from
(select * from poll limit pollNo,1 )as A
JOIN poll_data
on A.id=poll_data.poll_id;

END $$

DELIMITER ;

2 个答案:

答案 0 :(得分:2)

您使用的是哪个版本的MySQL?我认为这在5.5和转发中已得到修复,但之前的版本需要一种解决方法,因为它们需要整数常量或预处理语句。

因此,在5.5之前,您应该可以执行以下操作;

DELIMITER $$

DROP PROCEDURE IF EXISTS `prj`.`ret_poll` $$
CREATE PROCEDURE `prj`.`ret_poll` (IN pollNo int)
BEGIN
PREPARE STMT FROM "select * from (select * from poll limit ?,1 ) as A join poll_data on A.id=poll_data.poll_id";
SET @start = pollNo;

EXECUTE STMT USING @start;

END $$

DELIMITER ;

您可以在此处详细了解:http://bugs.mysql.com/bug.php?id=11918

答案 1 :(得分:1)

LIMIT需要一个整数作为输入,而不是列名。要做你正在谈论的事情需要动态查询。

这是一个forum post,讨论在MySQL中执行动态SQL。