游标或处理程序声明sql语句后的变量或条件声明(mysql)

7kjnsjlb  于 2021-06-15  发布在  Mysql
关注(0)|答案(2)|浏览(714)

即使我尝试了很多方法,它仍然会给我这个错误(游标或处理程序声明sql语句之后的变量或条件声明)
sp必须使用游标

  1. CREATE PROCEDURE monthly_sum (IN cardId INT(36), IN monthN INT, OUT sumV float)
  2. BEGIN
  3. DECLARE cursor_1 CURSOR FOR
  4. SELECT SUM(purchased.amountPurchased)
  5. FROM purchased
  6. WHERE MONTH(purchased.dateUsed) = monthN AND purchased.purchasedCardId = cardId AND DAY(purchased.dateUsed) <=10;
  7. DECLARE cursor_2 CURSOR FOR
  8. SELECT SUM(purchased.amountPurchased)
  9. FROM purchased
  10. WHERE MONTH(purchased.dateUsed) = monthN AND purchased.purchasedCardId = cardId AND DAY(purchased.dateUsed) <=20 AND DAY(purchased.dateUsed) >10;
  11. DECLARE cursor_3 CURSOR FOR
  12. SELECT SUM(purchased.amountPurchased)
  13. FROM purchased
  14. WHERE MONTH(purchased.dateUsed) = monthN AND purchased.purchasedCardId = cardId AND DAY(purchased.dateUsed) >20;
  15. DECLARE percentage1, percentage2, percentage3 float default 0;
  16. OPEN cursor_1;
  17. FETCH cursor_1
  18. INTO percentage1;
  19. CLOSE cursor_1;
  20. OPEN cursor_2;
  21. FETCH cursor_2
  22. INTO percentage2;
  23. CLOSE cursor_2;
  24. OPEN cursor_3;
  25. FETCH cursor_3
  26. INTO percentage3;
  27. CLOSE cursor_3;
  28. SET sumV = percentage1*0.01 + percentage2*0.02 + percentage1*0.03;
  29. SELECT sumV;
  30. END

前10天预期产量的1%,后10天预期产量的2%,本月剩余天数预期产量的3%

ndasle7k

ndasle7k1#

我添加了declare percentage1,percentage2,percentage3 float default 0;一开始就像卡门斯那样,我和它一起工作

gajydyqb

gajydyqb2#

您可以使用 select into . 因为游标用于逐行获取数据,但在您的情况下,它只会产生一次结果。

  1. CREATE PROCEDURE monthly_sum (IN cardId INT(36), IN monthN INT, OUT sumV float)
  2. BEGIN
  3. DECLARE percentage1, percentage2, percentage3 float default 0;
  4. SELECT SUM(purchased.amountPurchased) INTO percentage1
  5. FROM purchased
  6. WHERE MONTH(purchased.dateUsed) = monthN
  7. AND purchased.purchasedCardId = cardId
  8. AND DAY(purchased.dateUsed) <=10;
  9. SELECT SUM(purchased.amountPurchased) INTO percentage2
  10. FROM purchased
  11. WHERE MONTH(purchased.dateUsed) = monthN
  12. AND purchased.purchasedCardId = cardId
  13. AND DAY(purchased.dateUsed) <=20 AND DAY(purchased.dateUsed) >10;
  14. SELECT SUM(purchased.amountPurchased) INTO percentage3
  15. FROM purchased
  16. WHERE MONTH(purchased.dateUsed) = monthN
  17. AND purchased.purchasedCardId = cardId
  18. AND DAY(purchased.dateUsed) >20;
  19. SET sumV = percentage1*0.01 + percentage2*0.02 + percentage1*0.03; # I think percentage3 to be added instead of percentage1
  20. END
展开查看全部

相关问题