@TallY0209

В чём заключается ошибка?

неявный курсор для указанных месяца и валюты, повышающий стоимость на 5% для товаров, поступивших в указанной валюте и в заданном месяце текущего года. Сообщить, если вообще не было поступлений в указанный период или не было поступлений в указанной валюте.
DECLARE
w number;
BEGIN 
SELECT (pr.Value*cou.Value*0.05) INTO w
From PRODUCTS p ,INCOMING i,PRICES pr ,COURCES cou, CURRENCIES cr
where p.PROD_ID=i.PROD_ID and p.PROD_ID=pr.PROD_ID and to_char(sysdate,'MM.YYYY')=to_char(i.INC_DATE,'MM.YYYY') and pr.Cur_id = 1 and cr.Cur_id = pr.Cur_id and cou.Cur_idto=cr.Cur_id ;
IF SQL%NOTFOUND THEN 
dbms_output.put_line('В указанной валюте или в указанный период товары не поступали');
ELSE
dbms_output.put_line('стоимость поступивших товаров ='||' '||w);
END IF;
END;
выдаёт ошибку
ORA-01422: exact fetch returns more than requested number of rows
ORA-06512: at line 4
  • Вопрос задан
  • 358 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Akina
Сетевой и системный админ, SQL-программист.
SELECT .. INTO предназначен для помещения скалярного значения в скалярную же переменную. То есть он должен вернуть строго одну запись.

Показанный запрос явно возвращает более одной записи. И Оракл в недоумении - из какой записи набора ему предлагается взять значение для помещения в переменную?

И самое что интересное - Вы об этом знаете. Ибо по тексту имеется литерал 'стоимость поступивших товаров ='. Не "товара", а "товаров".

Если Вам нужна сумма стоимостей всех товаров - то оберните выражение в SUM().
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы