[英]MySql Stored Procedure -> Variable or condition declaration after cursor or handler declaration
[英]Variable or condition declaration after cursor or handler declaration SQL Statement (mysql)
即使我嘗試了很多事情,它仍然給我這個錯誤(游標或處理程序聲明SQL語句后的變量或條件聲明)
sp必須使用游標
CREATE PROCEDURE monthly_sum (IN cardId INT(36), IN monthN INT, OUT sumV float)
BEGIN
DECLARE cursor_1 CURSOR FOR
SELECT SUM(purchased.amountPurchased)
FROM purchased
WHERE MONTH(purchased.dateUsed) = monthN AND purchased.purchasedCardId = cardId AND DAY(purchased.dateUsed) <=10;
DECLARE cursor_2 CURSOR FOR
SELECT SUM(purchased.amountPurchased)
FROM purchased
WHERE MONTH(purchased.dateUsed) = monthN AND purchased.purchasedCardId = cardId AND DAY(purchased.dateUsed) <=20 AND DAY(purchased.dateUsed) >10;
DECLARE cursor_3 CURSOR FOR
SELECT SUM(purchased.amountPurchased)
FROM purchased
WHERE MONTH(purchased.dateUsed) = monthN AND purchased.purchasedCardId = cardId AND DAY(purchased.dateUsed) >20;
DECLARE percentage1, percentage2, percentage3 float default 0;
OPEN cursor_1;
FETCH cursor_1
INTO percentage1;
CLOSE cursor_1;
OPEN cursor_2;
FETCH cursor_2
INTO percentage2;
CLOSE cursor_2;
OPEN cursor_3;
FETCH cursor_3
INTO percentage3;
CLOSE cursor_3;
SET sumV = percentage1*0.01 + percentage2*0.02 + percentage1*0.03;
SELECT sumV;
END
預期輸出前10天的總和的1%,接下來10天的總輸出的2%,該月剩余天數的3%
我添加了DECLARE percent1,percent2,percent3 float默認值為0; 一開始像karmens89這樣評論我
您可以使用select into
來代替不必要地調用游標。 由於游標用於逐行獲取,但是在您的情況下,它只會生成一次。
CREATE PROCEDURE monthly_sum (IN cardId INT(36), IN monthN INT, OUT sumV float)
BEGIN
DECLARE percentage1, percentage2, percentage3 float default 0;
SELECT SUM(purchased.amountPurchased) INTO percentage1
FROM purchased
WHERE MONTH(purchased.dateUsed) = monthN
AND purchased.purchasedCardId = cardId
AND DAY(purchased.dateUsed) <=10;
SELECT SUM(purchased.amountPurchased) INTO percentage2
FROM purchased
WHERE MONTH(purchased.dateUsed) = monthN
AND purchased.purchasedCardId = cardId
AND DAY(purchased.dateUsed) <=20 AND DAY(purchased.dateUsed) >10;
SELECT SUM(purchased.amountPurchased) INTO percentage3
FROM purchased
WHERE MONTH(purchased.dateUsed) = monthN
AND purchased.purchasedCardId = cardId
AND DAY(purchased.dateUsed) >20;
SET sumV = percentage1*0.01 + percentage2*0.02 + percentage1*0.03; # I think percentage3 to be added instead of percentage1
END
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.