如何申报&在MYSQL STORED PROCEDURE中设置游标?

时间:2018-05-11 17:51:54

标签: mysql stored-procedures database-cursor

我正在尝试在mysql存储过程中使用CURSOR ...我在声明游标时遇到了挑战...我的错误是**错误1064(42000):你的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以便在';

附近使用正确的语法

来自TBL_SHOPPING_CART_ITEM的SELECT count(*)INTO countitem    SELECT Produ'在第8行 **

请帮我解决这个问题...提前致谢..我的代码如下,

delimiter //

CREATE PROCEDURE placeOrder(IN cartId INT)
BEGIN

   DECLARE countitem INT;
   DECLARE productId INT;
   DECLARE cartId INT;
   DECLARE itemDicountAmt INT;
   DECLARE itemCursor CURSOR;

   SET countitem = SELECT count(*) from TBL_SHOPPING_CART_ITEM
   SET itemCursor = SELECT ProductId, Quantity FROM TBL_SHOPPING_CART_ITEM
   OPEN itemCursor 
   WHILE countitem > 0
      BEGIN
         FETCH itemCursor into productId, cartId;
         itemDicountAmt = calculateNetItemStandardDiscountAmount(productId, cartId);
         insert into debugtable select concat('item discount amount', itemDicountAmt);
         SET countitem = countitem - 1;
      END
   CLOSE itemCursor 
   DEALLOCATE itemCursor    

END//
delimiter ;

1 个答案:

答案 0 :(得分:0)

别担心,这不是一个错误。 DECLARE子句用于告诉您的机器存在本地变量。通过知道现有的声明的局部变量,在声明之后进行操作。

所以在你的情况下,你试图在机器开始计算后添加一个新的变量声明,这在MySQL中是不可能的。你必须找到另一种方法来使用你的上一个变量。

要为变量分配新内容,首先使用DECLARE首先创建变量,然后使用SET作为声明变量的赋值。我将this link留在这里,以便您可以了解如何使用它。