【问题标题】:Adding Descriptions for Order Status Codes为订单状态代码添加描述
【发布时间】: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) 用于 idstagestatus_desc。如果你已经弄清楚了,你能解释一下这是如何给我一个“(null)”的吗?我不确定它是如何做到的。

谢谢你的帮助!!

【问题讨论】:

  • 为什么要使用这个功能?使用简单的 SQL 查询即可获得相同的结果。
  • 这是大学里的一项任务。那要我创建一个 idstage(数字)并返回结果的描述(varchar2)。我不知道为什么,但可能需要练习存储函数。

标签: sql oracle function plsql oracle12c


【解决方案1】:

您的函数中似乎不需要查询,只需要 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;

【讨论】:

  • 感谢您的帮助!我只是觉得这个问题超级愚蠢和脑死亡。我想我真的不需要选择语句。
猜你喜欢
  • 2011-03-14
  • 2020-08-06
  • 2016-05-18
  • 1970-01-01
  • 1970-01-01
  • 2010-12-10
  • 2018-01-12
  • 2014-09-03
相关资源
最近更新 更多