【问题标题】:How do pass in a limit to a query run inside a mysql 5 stored procedure?如何将限制传递给在 mysql 5 存储过程中运行的查询?
【发布时间】:2009-08-25 18:14:37
【问题描述】:

这是我想做的一个示例。 当查询中存在 LIMIT 时,存储过程无法创建。 如果我取消限制,程序就会创建。

CREATE PROCEDURE LimitTest(IN in_start INTEGER UNSIGNED, IN in_limit INTEGER UNSIGNED)
BEGIN
   DECLARE no_more_results INTEGER DEFAULT 0;
   DECLARE var_result INTEGER UNSIGNED;
   DECLARE row CURSOR FOR SELECT id from test LIMIT in_start,in_limit;
   DECLARE CONTINUE HANDLER FOR NOT FOUND 
    SET no_more_results = 1;
   OPEN  row;
      FETCH  row INTO var_result;
      REPEAT 
         INSERT INTO results VALUES(var_result);
         FETCH  row INTO var_result;
      UNTIL no_more_results = 1
      END REPEAT;
   CLOSE row;
END

【问题讨论】:

    标签: sql mysql stored-procedures


    【解决方案1】:

    问题是limit后面的数字必须是一个常数,并且不能是根据this bug report在MySQL的更高版本中保持未修复的参数。您可以尝试(丑陋的)解决方法outlined here:-

    CREATE PROCEDURE sp (
    IN LimitStart_ INT,
    IN LimitCnt_ INT
    )
    BEGIN
    SET @lim = CONCAT(' LIMIT ', LimitStart_, ',', LimitCnt_);
    SET @q = "SELECT mycol FROM mytable";
    
    SET @q = CONCAT(@q, @lim);
    PREPARE st FROM @q;
    EXECUTE st;
    DEALLOCATE PREPARE st;
    END;
    

    【讨论】:

    • 我对此进行了研究,但我不知道如何将结果放入游标中,以便在以后的插入中使用它们。
    猜你喜欢
    • 2012-06-24
    • 2017-12-29
    • 2012-10-13
    • 2011-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多