代码:
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并返回状态描述。阶段ID的说明如表6-3所示。测试SELECT语句中的函数,该语句检索篮子4的BB_BASKETSTATUS表中的所有行,并显示阶段ID及其描述。
故事:
我知道我写的存储函数是正确的,因为当它被拆分出来并拥有select语句时,它就可以工作了。当我将它添加到函数中时,它不起作用。我尝试切换参数和局部变量lv_idstage,它什么也不起作用。我确实从sql代码中得到了一些信息,但是对于idstage和status_desc,状态的描述是1 | (null)。如果你已经弄明白了,你能给我解释一下这是怎么得到一个"(null)“的吗?我不知道它是怎么做到的。
谢谢你的帮助!!
发布于 2019-03-12 05:33:55
似乎你的函数中不需要查询,只需要一条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;https://stackoverflow.com/questions/55110375
复制相似问题