【发布时间】:2019-08-02 06:28:40
【问题描述】:
代码:
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。如果你已经弄清楚了,你能解释一下这是如何给我一个“(null)”的吗?我不确定它是如何做到的。
谢谢你的帮助!!
【问题讨论】:
-
为什么要使用这个功能?使用简单的 SQL 查询即可获得相同的结果。
-
这是大学里的一项任务。那要我创建一个 idstage(数字)并返回结果的描述(varchar2)。我不知道为什么,但可能需要练习存储函数。
标签: sql oracle function plsql oracle12c