DELIMITER $$
DROP PROCEDURE IF EXISTS `sp_information`$$
CREATE
    PROCEDURE `vehicle`.`sp_information`(IN limitted BOOLEAN,IN started INT(255),IN size INT(255))
    BEGIN    IF limitted=TRUE THEN
      BEGIN
        SELECT
        `tab_user`.`id`       AS `id`,
        `tab_user`.`name`     AS `uname`,
        `tab_user`.`age`      AS `age`,
        `tab_vehicle`.`color` AS `color` 
         FROM (`tab_user` 
          JOIN `tab_vehicle`) 
           WHERE (`tab_user`.`id` = `tab_vehicle`.`id`) LIMIT started,size;
       END;
    ELSE
      BEGIN
      SELECT
        `tab_user`.`id`       AS `id`,
        `tab_user`.`name`     AS `uname`,
        `tab_user`.`age`      AS `age`,
        `tab_vehicle`.`color` AS `color` 
         FROM (`tab_user` 
          JOIN `tab_vehicle`) 
           WHERE (`tab_user`.`id` = `tab_vehicle`.`id`);
      END;
    END IF;
    
    END$$DELIMITER ;  如你所见,这里写得很浪费,区别只要是后面分页的选择(MYSQL的,这里)
  哪位前辈可以指点一二,借条大腿抱一抱?
  谢啦!

解决方案 »

  1.   

    很遗憾,MYSQL不支持 LIMIT started,size; 这种变量, LIMIT后只能是常数。
    你可以用 set @sql = "select .... limit 10,100" 
    生成需要的SQL语句然后 用 mysql> SET @s = 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse';
    mysql> PREPARE stmt2 FROM @s;
    mysql> SET @a = 6;
    mysql> SET @b = 8;
    mysql> EXECUTE stmt2 USING @a, @b;
    +------------+
    | hypotenuse |
    +------------+
    |         10 |
    +------------+
    mysql> DEALLOCATE PREPARE stmt2;
    这类方法执行。
      

  2.   

      谢谢你的回复啊,不过,你说的:很遗憾,MYSQL不支持 LIMIT started,size; 这种变量, LIMIT后只能是常数      支持这种变量啊,上面我列出来的是支持的,不过就是后面关于分页limit from,size  这里的条件我想用个变量来代替啊   例如,定义一个变量
       DECLARE sql_value VARCHAR(255) DEFAULT '';
     SET sql_value='LIMIT started,size';
        BEGIN        SELECT        `tab_user`.`id`       AS `id`,         `tab_user`.`name`     AS `uname`,         `tab_user`.`age`      AS `age`,         `tab_vehicle`.`color` AS `color`           FROM (`tab_user`            JOIN `tab_vehicle`)             WHERE (`tab_user`.`id` = `tab_vehicle`.`id`)  sql_value;        END; 
       'LIMIT started,size'用变量sql_value来替代
        但就是怎么把这个变量添加到select语句where条件后面,我尝试用java的格式:+sql_value,但这种写法mysql不支持,我想怎么才能加进去
       
      

  3.   

    字符串累加生成SQL语句
    a='10'
    b='10'
    sql='select * from tt limit '+a+','+b
    再执行SQL语句