首页 > 解决方案 > SQL 函数和案例返回问题

问题描述

为简单起见,我有一个表,其中有一个名为 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;

当我运行它并显示错误时,我会从 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 部分,但这不是错误出现的地方。

标签: oracleplsql

解决方案


试试这个:

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;

案例是一个表达式


推荐阅读