簡體   English   中英

游標或處理程序聲明后的變量或條件聲明SQL語句(mysql)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM