【问题标题】:Using Group inside of a function在函数内部使用 Group
【发布时间】:2019-10-26 21:16:39
【问题描述】:

我想创建一个函数,该函数根据函数的 ID 输入返回小计。下面返回正确的计算,但它对表中的每个条目重复它。

create or replace FUNCTION CalC_SUBTOTAL
(p_basskID IN BB_BASKETITEM.IDBASKET%TYPE)
RETURN NUMBER
IS
pSUB NUMBER;
BEGIN
   Select Sum(BB_BASKETITEM.PRICE*BB_BASKETITEM.QUANTITY)into pSUB
      From BB_BASKETITEM
      WHERE BB_BASKETITEM.IDBASKET=p_basskID
      GROUP By IDBASKET;
RETURN (pSUB);
END;

【问题讨论】:

  • 欢迎来到 SO!当您提出问题时,请尝试添加最少的内容:输入样本、预期输出样本、您尝试了什么、研究以及您卡在哪里。您的问题不清楚,您的预期输出是什么?
  • IDBASKET 是 BB_BASKETITEM 的主键吗?如果你按它分组,大概不会。那么你使用哪个表来调用这个函数呢?您需要提供更多信息。我们只知道您告诉我们什么。请编辑您的问题,使用表结构、示例数据和从该示例派生的预期输出,您用来调用此函数的 SQL 会很有帮助。

标签: oracle plsql oracle11g stored-functions


【解决方案1】:

我写这个作为答案,因为它太大了,无法发表评论......希望这会对你有所帮助。我为你创建了这个模拟:DEMO 我在其中创建了一个包含您使用的列的简单表:

create table BB_BASKETITEM(IDBASKET number, price number, QUANTITY number );

然后我输入了一些简单的数据进行测试:

insert into BB_BASKETITEM values (1, 10, 5);
insert into BB_BASKETITEM values (2, 15, 4);
insert into BB_BASKETITEM values (3, 20, 2);
insert into BB_BASKETITEM values (1, 30, 10);

然后我创建了你的函数:

create or replace FUNCTION CalC_SUBTOTAL
(p_basskID IN BB_BASKETITEM.IDBASKET%TYPE)
RETURN NUMBER
IS
pSUB NUMBER;
BEGIN
   Select Sum(BB_BASKETITEM.PRICE*BB_BASKETITEM.QUANTITY)into pSUB
      From BB_BASKETITEM
      WHERE BB_BASKETITEM.IDBASKET=p_basskID
      GROUP By IDBASKET;
RETURN (pSUB);
END;
/

并调用该函数:

begin
 dbms_output.put_line(CalC_SUBTOTAL(1));
end;
/

一切正常。 在我的演示中,您将看到结果应该是 350。你期望的结果是什么?你什么时候调用这个函数?也许问题出在通话中?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-28
    • 2020-10-26
    • 1970-01-01
    • 2018-12-15
    • 2011-03-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多