2012-07-28 32 views
0

我在Mysql的以下過程中執行。在Mysql 5.1中創建過程時出錯

DROP procedure IF EXISTS `wm_batch_list`; 

DELIMITER $$ 

/*!50003 SET @[email protected]@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 [email protected]_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 

請建議我在哪裏做的錯誤?

回答

1

谷歌上搜索了一下,我發現在passing LIMIT as parameters to MySQL sproc

與你從http://dev.mysql.com/doc/refman/5.1/en/select.html一個問題:

LIMIT子句可以被用來限制SELECT語句返回的行數。 LIMIT需要一個或兩個數字參數,它們都必須是非負整數常量(除了使用預準備語句時)。

於是方式來解決它使用的是準備語句

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

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