Использование группы внутри функции - PullRequest
0 голосов
/ 27 октября 2019

Я пытаюсь создать функцию, которая возвращает промежуточный итог, основанный на вводе идентификатора функции. Ниже приведен верный расчет, но он повторяется для каждой записи в таблице.

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;

1 Ответ

1 голос
/ 27 октября 2019

Я пишу это как ответ, потому что он слишком велик для комментария ... Надеюсь, это поможет вам. Я создал эту симуляцию для вас: 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, как и должно быть. Что вы ожидаете быть результатом? Когда вы вызываете эту функцию? Может проблема в звонке?

...