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