代码:
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
。如果您已经解决了这个问题,能否请您向我解释这是如何获得“(空)”的?我不确定它的运行方式。
感谢您的帮助!
答案 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;