在MySQL5.1中,如果编写存储过程时使用limit做变量,那是需要用动态SQL来构建的,而这样做性能肯定没有静态SQL好,比如,下面这个简单的例子:
DELIMITER $$
CREATE PROCEDURE 'hcy'.'test_dynamic_limit' (v_limit INT)
BEGIN
SET @sql=CONCAT('select * from t1 limit ',v_limit);
PREPARE cmd FROM @sql;
EXECUTE cmd;
END$$
DELIMITER ;
这个就是用动态SQL来写的,如果该例直接采用静态SQL来写,在MySQL5.1版本里就会报错,它不支持这样的语法,如图1-22所示。
但在MySQL5.5版本里采用静态SQL来写就会创建成功,如图1-23所示。
这样对开发来说就方便多了。