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

标签 mysql sql stored-procedures cursor mysql-workbench

即使我尝试了很多方法,它仍然给我这个错误(光标或处理程序声明后的变量或条件声明 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 百分比 1、百分比 2、百分比 3 float 默认 0;一开始就像 karmen 89 评论我一样,它起作用了

关于mysql - 游标或处理程序声明之后的变量或条件声明 SQL 语句 (mysql),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54092864/

相关文章:

php - 如何从 PHP 数组插入多个 MySQL 表行

sql - 在 PostgreSQL 中按版本号解析记录

mysql - 在 mysql8 中,为什么 DATE DEFAULT CURRENT_DATE 需要在 CURRENT_DATE 周围加括号?

mysql - 当调用的子过程失败时防止在过程中提交

sql - 存储过程(删除发票)

mysql - 如何在没有任何连接的情况下优化大型 MySQL 表中的查询?

php - TIMESTAMPDIFF 适用于日但不适用于分钟

mysql - Mysql中通过注释选择存储过程名称

mysql - 高效地将 csv 文件加载到 MySQL 表中

java - 按代码排序