簡體   English   中英

存儲過程中的 MySQL 案例:錯誤代碼:1064

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

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