MySQL存储过程不能直接使用limit加上变量的形式, 因为MySQL会把变量当成字段名。怎么办? 有条弯路可走,使用CONCAT 方法把字符串连接在一起, 然后 EXECUTE, 得到结果集。

DELIMITER $$
DROP PROCEDURE IF EXISTS `test_p1`$$

CREATE PROCEDURE `test_p1`(IN param INT)
BEGIN
		/* 获得10条记录 */
		SET @sql = CONCAT('SELECT * FROM table_a  LIMIT ', param, '  10 ' );
		PREPARE sqlstmt FROM @sql;
		EXECUTE sqlstmt;
		DEALLOCATE PREPARE sqlstmt;

    END$$
DELIMITER ;

其实可以再加上一些判断,使得同一个存储过程在不同参数下查询不同的表,或者匹配不同的条件。 这样做也方便前台的开发者理解、调用, 不用去记N多的存错过程名称,只要改个参数即可。