简单来说,我有一个表,其中有一列叫做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部分,但这不是错误出现的地方。
试试这个。
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是一个表达式
所以问题是在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提供了一个很好的资源来学习正确的语法。