如何将SQL Server游标转换为MySQL等效

前端之家收集整理的这篇文章主要介绍了如何将SQL Server游标转换为MySQL等效前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如何将以下过程转换为MysqL格式?

这是要转换的部分:

  1. DECLARE @CurrentFirstName varchar(300)
  2. DECLARE @CurrentAge INT
  3.  
  4. DECLARE CursorName CURSOR FAST_FORWARD FOR
  5. SELECT Firstname,Age
  6. FROM Customers
  7.  
  8. OPEN CursorName
  9. FETCH NEXT FROM CursorName INTO @CurrentFirstName,@CurrentAge
  10.  
  11. WHILE @@FETCH_STATUS = 0
  12. BEGIN
  13. IF @AGE>60 /*this is stupid but we can apply any complex condition here*/ BEGIN
  14. insert into ElderCustomers values (@CurrentFirstName,@CurrentAge)
  15. END
  16.  
  17.  
  18. FETCH NEXT FROM CursorName INTO @CurrentFirstname,@CurrentAge
  19. END
  20.  
  21. CLOSE CursorName
  22. DEALLOCATE CursorName

如果上面有问题,请提前抱歉

解决方法

MysqL等价物将是这样的:
  1. BEGIN
  2. DECLARE CurrentFirstName VARCHAR(300);
  3. DECLARE CurrentAge INT;
  4. DECLARE done INT DEFAULT FALSE;
  5. DECLARE CursorName CURSOR FOR
  6. SELECT FirstName,Age FROM Customers;
  7. DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
  8. OPEN CursorName;
  9. myloop: LOOP
  10. FETCH CursorName INTO CurrentFirstName,CurrentAge;
  11. IF done THEN
  12. LEAVE myloop;
  13. END IF;
  14. IF CurrentAge > 60 THEN
  15. insert into ElderCustomers values (CurrentFirstName,CurrentAge);
  16. END IF;
  17. END LOOP;
  18. CLOSE CursorName;
  19. END;

最大的区别在于循环,使用CONTINUE HANDLER在没有更多行要提取时设置标志,并在设置标志时退出循环. (这看起来很难看,但这就是在MysqL中完成的方式.)

这个例子引出了一个问题:为什么没有这样写(在sql Server和MysqL中更有效):

  1. INSERT INTO ElderCustomers (FirstName,Age)
  2. SELECT FirstName,Age
  3. FROM Customers
  4. WHERE Age > 60

猜你在找的MsSQL相关文章