[英]MySQL case when in stored procedure: Error Code: 1064
表:订单(字段:customerNumber,状态) 要求:接受客户编号并返回已发货、取消、已解决和有争议的订单总数。 更多信息: https : //www.mysqltutorial.org/mysql-stored-procedures-return-multiple-values/
## I am trying to implement this requirement using case when. the code is below:
## using MySQLWorkBench
delimiter //
create procedure get_order_number_by_status(
in cnumber int
, out shipped int
, out cancelled int
, out resolved int
, out disputed int
)
begin
select case o.status ## Error: "select is not valid at this position for...
when 'Shipped' then shipped :=shipped +1
when 'Cancelled' then cancelled :=cancelled +1
when 'Resolved' then resolved :=resolved +1
when 'Disputed' then disputed :=disputed +1
else null
end
from customers c join orders o
on c.customernumber = o.customernumber
where c.customernumber = cnumber;
end //
我无法解决这个问题,需要帮助。
不能以这种方式使用局部变量。 只有用户定义的变量允许内联赋值。
create procedure get_order_number_by_status(
in cnumber int
, out shipped int
, out cancelled int
, out resolved int
, out disputed int
)
begin
select case o.status
when 'Shipped' then @shipped := @shipped +1
when 'Cancelled' then @cancelled := @cancelled +1
when 'Resolved' then @resolved := @resolved +1
when 'Disputed' then @disputed := @disputed +1
else null
end
from customers c join orders o
on c.customernumber = o.customernumber
CROSS JOIN (SELECT @shipped:=0, @cancelled:=0, @resolved:=0, @disputed:=0) init
where c.customernumber = cnumber;
SET shipped := @shipped;
SET cancelled := @cancelled;
SET resolved := @resolved;
SET disputed := @disputed;
end
附注。 为什么不简单
create procedure get_order_number_by_status(
in cnumber int
, out shipped int
, out cancelled int
, out resolved int
, out disputed int
)
select SUM(o.status = 'Shipped'),
SUM(o.status = 'Cancelled'),
SUM(o.status = 'Resolved'),
SUM(o.status = 'Disputed')
INTO shipped, cancelled, resolved, disputed
from customers c join orders o
on c.customernumber = o.customernumber
where c.customernumber = cnumber
GROUP BY o.status;
?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.