limit 后面当然能用变量啦,只是提交到 MySQL 的时候,startIndex, endIndex 必须要有具体的数值,有就可以!
要设置startIndex和endIndex的值,INT默认值为0,就是一条记录都不返回了
DELIMITER $$DROP PROCEDURE IF EXISTS `isb_service`.`Select_Templates` $$ CREATE PROCEDURE `isb_service`.`Select_Templates` ( in in_startIndex integer, in in_maxPerPage integer ) BEGIN Declare startIndex integer; Declare maxPerPage integer; set startIndex=in_startIndex; set maxPerPage=in_maxPerPage; select * from `templates` limit startIndex,maxPerPage; END $$DELIMITER ;
CREATE PROCEDURE `isb_service`.`Select_Templates` (
in in_startIndex integer,
in in_maxPerPage integer
)
BEGIN
Declare startIndex integer;
Declare maxPerPage integer; set startIndex=in_startIndex;
set maxPerPage=in_maxPerPage; select * from `templates` limit startIndex,maxPerPage;
END $$DELIMITER ;
我觉得是MySQL存储过程编译器,不支持limit使用变量,
可能是MySQL开发人员当时没想到limit使用变量吧
C里面的组装方式:sprintf(buffer, "select * from `templates` limit %d, %d", startIndex, maxPerPage);