mysql 存储过程 为什么limit p1  就是limit后面不能带变量CREATE PROCEDURE `rep2`(p1 int)
BEGINselect id from ae order by id desc limit p1--------------------死活编译不能通过 提示 limit后面是变量
现在只能把他写死。 没有其他方法了??

解决方案 »

  1.   

    不能带变量!
    看你想实现什么功能,或许可以使用 PREPARE / EXECUTE / DEALLOCATE PREPARE  来实现。mysql> PREPARE stmt1 FROM 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse';
    mysql> SET @a = 3;
    mysql> SET @b = 4;
    mysql> EXECUTE stmt1 USING @a, @b;
    +------------+
    | hypotenuse |
    +------------+
    |          5 |
    +------------+
    mysql> DEALLOCATE PREPARE stmt1;
      

  2.   

    几台mysql服务器 观察select version()发现 a b c3台的机器的mysql 版本分别是5.0.45-community-log
    5.0.45-log
    5.0.45想知道他们之间有区别没哟????
      

  3.   

    感谢 mysql> PREPARE stmt1 FROM 'SELECT * from a limit ?';
    Query OK, 0 rows affected (0.00 sec)
    Statement preparedmysql>  SET @a = 3;
    Query OK, 0 rows affected (0.00 sec)mysql> EXECUTE stmt1 USING @a;
    +------+
    | a    |
    +------+
    |    1 | 
    |    2 | 
    |    2 | 
    +------+
    3 rows in set (0.00 sec)mysql> DEALLOCATE PREPARE stmt1;
    Query OK, 0 rows affected (0.00 sec)
    测试通过
      

  4.   

    CREATE ` PROCEDURE `sp_say_hello`(p1 int)
        COMMENT 'This procedure generates string "Hello,world!"'
    BEGINPREPARE stmt1 FROM 'SELECT * from a limit ?';
    SET @a = p1;
     EXECUTE stmt1 USING @a;
     DEALLOCATE PREPARE stmt1;
    END;
    存储过程可以完全实现 感谢ACMAIN_CHM  提供思路
      

  5.   

    不是我提供的思路,是MYSQL文档中的例子·!
      

  6.   

    非常不错,之前没学过prepare,现在又多学点了!!