mysql - 在 Mysql 5.1 中创建过程时出错

标签 mysql stored-procedures syntax-error

我正在 Mysql 中执行以下过程。

DROP procedure IF EXISTS `wm_batch_list`;

DELIMITER $$

/*!50003 SET @TEMP_SQL_MODE=@@SQL_MODE, SQL_MODE='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */ $$
CREATE DEFINER=`root`@`localhost` procedure `wm_batch_list`(IN p_start int(11),IN p_range int(11))
BEGIN
select * from batch ORDER BY start_year DESC limit p_start,p_range;
END $$
/*!50003 SET SESSION SQL_MODE=@TEMP_SQL_MODE */  $$

DELIMITER ;

但我收到此错误:

Error code 1064, SQL state 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'p_start,p_range;
END' at line 3

请指出我哪里做错了?

最佳答案

谷歌搜索了一下,我发现了一个与你的问题相关的问题:passing LIMIT as parameters to MySQL sproc

来自http://dev.mysql.com/doc/refman/5.1/en/select.html :

LIMIT 子句可用于限制 SELECT 语句返回的行数。 LIMIT 接受一个或两个数字参数,它们必须都是非负整数常量(使用准备好的语句时除外)。

解决这个问题的方法是使用prepare语句

SET @skip=p_start;
SET @rows=p_range;

PREPARE STMT FROM 'SELECT * FROM table LIMIT ?, ?';
EXECUTE STMT USING @skip, @rows;

关于mysql - 在 Mysql 5.1 中创建过程时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11700833/

相关文章:

mysql - 谷歌地图半径搜索

php - 我们如何根据 php 和 mysql 中关键字的出现对搜索结果进行排序

php - 您的 SQL 语法有误;查看与您的 MySQL 服务器版本对应的手册,了解在 '' 附近使用的正确语法

php - 将 HTML5 输入类型日期转换为字符串

python - 使用Python的while循环中的if/elif/else语句

python - 阅读擅长工作表,并创建一个DataFrame。语法错误: cannot assign to function call

php - 如何在mysql codeigniter php中使用select来计算匹配的关键字?

mysql - 使用游标或多次调用存储过程哪个更好

sql - 在sql server中选择单行作为多行

xcode - 数组的不可变值仅具有名为append的可变成员