在函数内部使用组

问题描述 投票:-1回答:1

我想创建一个函数,该函数根据输入到函数的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;
oracle plsql oracle11g stored-functions
1个回答
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。您期望得到什么结果?什么时候调用此函数?也许问题出在电话上?

© www.soinside.com 2019 - 2024. All rights reserved.