【问题标题】:Create MySQL Query Using Variable Value in Procedures在过程中使用变量值创建 MySQL 查询
【发布时间】:2013-11-12 06:36:05
【问题描述】:

我必须尝试在 MySQL 查询过程中使用变量值。
但它不起作用。这是我的程序:

SET @start=0;
SET @finish=150;

...

DECLARE curs1 CURSOR FOR SELECT tempDate FROM tbl_temp LIMIT @start,@finish;

...

我只想创建如下查询

SELECT tempDate FROM tbl_temp LIMIT 0,150;

各位,我该怎么办?

谢谢。

【问题讨论】:

    标签: mysql variables procedure


    【解决方案1】:

    您可以将它与下面的动态查询一起使用

    @qry varchar(max)
    set @qry ='DECLARE curs1 CURSOR FOR SELECT tempDate FROM tbl_temp LIMIT'+ @start+','+ @finish
    
    exec(@qry)
    

    【讨论】:

    • 准备来自@qry的stmt;执行语句; DEALLOCATE PREPARE stmt;可以使用上面的代码代替 exec(@qry)
    【解决方案2】:

    MySQL 5.5 中可以使用在 LIMIT 子句中使用变量或过程参数。

    否则您需要使用准备好的语句。从文档中 - 在存储的程序中,LIMIT 参数可以使用整数值的例程参数或 MySQL 5.5.6 起的局部变量来指定。示例:

    SET @skip=1; SET @numrows=5;
    PREPARE STMT FROM 'SELECT * FROM tbl LIMIT ?, ?';
    EXECUTE STMT USING @skip, @numrows;
    

    更多信息 - SELECT syntax

    【讨论】:

      【解决方案3】:

      试试这个:

      SET start=0;
      SET finish=150;
      
      DECLARE curs1 CURSOR FOR SELECT tempDate FROM tbl_temp LIMIT start,finish;
      

      【讨论】:

        【解决方案4】:

        目前,MySQL 不支持http://bugs.mysql.com/bug.php?id=8094 中提到的 LIMIT 子句上的变量

        但是,您可以使用准备好的语句来解决您的问题,如下脚本:

        SET @start=0;
        SET @finish=150;
        SET @query = "SELECT tempDate FROM tbl_temp LIMIT " + @start + ", " + @finish
        EXEC(@query)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-03-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-07-26
          • 2013-05-15
          相关资源
          最近更新 更多