SQL函数& Case返回的问题

问题描述 投票:0回答:1

简单来说,我有一个表,其中有一列叫做IDSTAGE的列,里面有一个数字(1到5),我想创建一个函数来获取这个数字并返回一个描述。这就是我所得到的。

FUNCTION STATUS_DESC_SF (p_idstage IN BB_BASKETSTATUS.IDSTAGE%TYPE)
RETURN VARCHAR2
AS
BEGIN
    CASE
        WHEN p_idstage = 1 THEN RETURN '1 - Order Submitted'
        WHEN p_idstage = 2 THEN RETURN '2 - Accepted, sent to shipping'
        WHEN p_idstage = 3 THEN RETURN '3 - Back-ordered'
        WHEN p_idstage = 4 THEN RETURN '4 - Cancelled'
        WHEN p_idstage = 5 THEN RETURN '5 - Shipped'
        ELSE RETURN 'Null'
    END CASE;
END STATUS_DESC_SF;

当我运行这个函数,并显示err时,我得到以下信息 每行以when开头。

6/3      PLS-00103: Encountered the symbol "WHEN" when expecting one of
         the following:
         * & = - + ; < / > at in is mod remainder not rem
         <an exponent (**)> <> or != or ~= >= <= <> and or like like2
         like4 likec between || multiset member submultiset
         The symbol ";" was substituted for "WHEN" to continue.

我已经做了我应尽的努力,并仔细检查了我的语法,据我所知,我没有做错任何事情。我怀疑它不喜欢THEN RETURN部分,但这不是错误出现的地方。

sqlplus
1个回答
1
投票

试试这个。

RETURN CASE
    WHEN p_idstage = 1 THEN '1 - Order Submitted'
    WHEN p_idstage = 2 THEN '2 - Accepted, sent to shipping'
    WHEN p_idstage = 3 THEN '3 - Back-ordered'
    WHEN p_idstage = 4 THEN '4 - Cancelled'
    WHEN p_idstage = 5 THEN '5 - Shipped'
    ELSE 'Null'
END;

Case是一个表达式


0
投票

所以问题是在then结果行的末尾没有分号。在SQL中,它们是不需要的,但在PLSQL函数中它们是需要的。

修正后的代码。

FUNCTION STATUS_DESC_SF
    (p_idstage IN BB_BASKETSTATUS.IDSTAGE%TYPE)
    RETURN VARCHAR2
AS
BEGIN
    CASE
        WHEN p_idstage = 1 THEN RETURN '1 - Order Submitted';
        WHEN p_idstage = 2 THEN RETURN '2 - Accepted, sent to shipping';
        WHEN p_idstage = 3 THEN RETURN '3 - Back-ordered';
        WHEN p_idstage = 4 THEN RETURN '4 - Cancelled';
        WHEN p_idstage = 5 THEN RETURN '5 - Shipped';
        ELSE RETURN 'Null';
    END CASE;
END;

感谢kutschkem提供了一个很好的资源来学习正确的语法。

© www.soinside.com 2019 - 2024. All rights reserved.