【问题标题】:User-defined Table Variables in MySQL 5.5?MySQL 5.5 中的用户定义表变量?
【发布时间】:2011-11-05 19:12:44
【问题描述】:

我最近从 MSSQL 迁移到 MySQL。

我想在 MySQL 5.5 存储例程中使用表变量(或等效变量)来填充在线报告的数据集。

在 MS SQL 中,我会这样做

...
...
DECLARE @tblName TABLE
WHILE <condition>
BEGIN
    Insert Row based on iteration value
END
...
...

据我了解,我无法在 MySQL 中声明表变量(如果我错了,请纠正我)如何在 MySQL 存储过程中实现上述逻辑?

【问题讨论】:

    标签: mysql stored-procedures routines


    【解决方案1】:

    您可以创建一个表或临时表并用您需要的数据填充它。

    CREATE TABLE Syntax

    【讨论】:

    • 谢谢,我会试试这个然后回来。
    • 这确实是我想要的 :-) 谢谢!
    • 公平地说,OP可能不知道这一点,但是创建表或临时表与MS SQL中的declare @tblName table不同。后者与临时表有一些细微差别:stackoverflow.com/questions/27894/…
    【解决方案2】:

    您正确理解了该限制。 MySQL用户手册明确指出用户定义的变量不能引用表: http://dev.mysql.com/doc/refman/5.5/en/user-variables.html

    用户变量旨在提供数据值。它们不能直接在 SQL 语句中用作标识符或标识符的一部分,例如在需要表或数据库名称的上下文中,或用作保留字(如 SELECT)。

    【讨论】:

      【解决方案3】:

      创建临时表 tmp ( id int unsigned not null, 名称 varchar(32) 不为空 ) 引擎=内存; -- 如果需要,更改引擎类型,例如 myisam/innodb

      insert into tmp (id, name) select id, name from foo...;

      --做更多的工作......

      select * from tmp order by id;

      如果存在则删除临时表 tmp;

      【讨论】:

        【解决方案4】:

        我认为this 涵盖了它。另外,this 可能会有所帮助。

        【讨论】:

          猜你喜欢
          • 2019-09-30
          • 1970-01-01
          • 2013-04-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-08-28
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多