我想在my-sql中使用while循环

时间:2013-03-21 12:10:07

标签: mysql sql-server loops while-loop

我已经在SQL Server中使用下面的代码它工作正常,我正在尝试在mysql中使用相同的代码但是我收到了错误消息

  

1064-你在sql systex中有错误;检查与您的mysql服务器版本对应的手册,以便使用右侧systax Near'Declare @var Table(数量int,宽度varchar(255))在第1行插入@var选择

Declare @var Table 
    ( quantity int, width varchar(255) )
Insert @var
SELECT DISTINCT
    vtiger_inventoryproductrel.quantity, vtiger_inventoryproductrel.width
From
    vtiger_inventoryproductrel

Declare @var1 Table 
    ( quantity int, width varchar(255) )

Declare @Order_Item_Id varchar(10),@Qty int 
Set @Order_Item_Id = ''
While @Order_Item_Id < (Select Max(id) From @var)

Begin 
    Select @Order_Item_Id= Min(id) from @var where id > @Order_Item_Id
    Select @Qty = quantity From @var Where id = @Order_Item_Id
    While @Qty>0
    Begin 
        Set @Qty = @Qty-1 
        Insert into @var1 select * From @var Where id = @Order_Item_Id
    End 
End 

Select * From @var1

2 个答案:

答案 0 :(得分:1)

MySQL不是Microsoft SQL Server。

它们具有非常不同的存储过程语言。在许多方面,与Microsoft相比,MySQL的存储过程语言是有限的,并且功能较少。大多数MySQL用户根本不编写存储过程,更喜欢用PHP,Ruby,Python,Java,C#或其他喜欢的语言在应用层编写业务逻辑。

以下是与您的示例程序相关的几点:

  • MySQL没有Table类型。您不能将变量声明为表。

  • 使用SET为语句中的变量赋值,而不是INSERT

  • 使用SELECT...INTO将查询结果分配给变量。

  • 存储过程中的每个语句都需要一个分号(;)终止符。

  • 你不能SELECT ... FROM @var。表名不支持变量。您可以通过将@var连接成一个字符串,然后将该字符串用作prepared statement来完成此操作。

这不是一个完整的清单,列出了为了让这个程序在MySQL中运行而需要改变的地方,这只是差异的一个例子。

答案 1 :(得分:0)

在mysql中创建一个临时表

create temporary table var( quantity int, width varchar(255) );
create temporary table var1(quantity int, width varchar(255));

将数据插入临时表

insert into var(quantity, width )
SELECT DISTINCT vtiger_inventoryproductrel.quantity, vtiger_inventoryproductrel.width From vtiger_inventoryproductrel

从mysql表中读取数据时不使用游标,使用游标。 Mysql Cursor Usage

var中的临时表也不包含列id