添加订单状态代码的描述

时间:2019-03-11 21:03:38

标签: sql oracle function plsql oracle12c

代码:

CREATE OR REPLACE FUNCTION STATUS_DESC_SF 
(
  P_STATUS_ID IN bb_basketstatus.IDSTAGE%type 
)
RETURN VARCHAR2 AS 
    lv_idstage bb_basketstatus.IDSTAGE%type;

BEGIN
    select (CASE
            WHEN IDSTAGE = 1 THEN
                'Order submitted'
            WHEN IDSTAGE = 2 THEN
                'Accepted, sent to shipping'
            WHEN IDSTAGE = 3 THEN
                'Back-ordered'
            WHEN IDSTAGE = 4 THEN
                'Cancelled'
            ELSE
                'Shipped'
            END) STAGE_ID
        INTO lv_idstage
    from bb_basketstatus
    where idbasket = P_STATUS_ID;
  RETURN lv_idstage;
END STATUS_DESC_SF;

select idstage, status_desc_sf(idstage) status_desc
from bb_basketstatus
where idbasket = 4;

问题:

当购物者返回网站检查订单状态时,将显示BB_BASKETSTATUS表中的信息。但是,BB_BASKETSTATUS表中仅状态码可用,而状态描述则不可用。创建名为STATUS_DESC_SF的函数,该函数接受阶段ID并返回状态描述。表6-3中列出了阶段ID的描述。在SELECT语句中测试该功能,该语句检索BB_BASKETSTATUS表中篮子4的所有行,并显示阶段ID及其描述。

故事:

我知道我正确地编写了存储函数,因为当将其分解并具有select语句本身时,它就可以工作。当我将其添加到函数中时,它不起作用。我试图切换参数和局部变量lv_idstage,但它什么也没做。我确实从sql代码中得到了一些帮助,但是对于1 | (null)idstage的状态描述是status_desc。如果您已经解决了这个问题,能否请您向我解释这是如何获得“(空)”的?我不确定它的运行方式。

感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

似乎您的函数中不需要查询,只需要一个CASE语句:

CREATE OR REPLACE FUNCTION STATUS_DESC_SF (
    P_STATUS_ID IN bb_basketstatus.IDSTAGE%type)
    RETURN VARCHAR2 AS 
  lv_status_desc varchar2(100);

BEGIN
  lv_status_desc :=  
       CASE WHEN P_STATUS_ID = 1 THEN 'Order submitted'
            WHEN P_STATUS_ID = 2 THEN 'Accepted, sent to shipping'
            WHEN P_STATUS_ID = 3 THEN 'Back-ordered'
            WHEN P_STATUS_ID = 4 THEN 'Cancelled'
            ELSE 'Shipped' END;

  return lv_status_desc;
end;